单个项目中的多个 windows
Multiple windows in a single project
我的项目要求在一个屏幕上显示两个 QML Window
(一个发送者,一个接收者)。 .qml
都要求我在其中包含一些 Cpp 模型,因此,我使用 QQmlApplicationEngine
来注册 Cpp 模型。
我发现使用 QWidget::createWindowContainer()
我可以为单个项目显示多个 Window
。这对于第一个 QML 文件来说工作得很好。代码片段如下所示:
QQmlApplicationEngine* engine = new QQmlApplicationEngine(Qurl("main.qml"));
QmlContext* context = engine.getContextProperty();
//do some Cpp models registering...
QQuickview *view = new QQuickview(engine,0);
QWidget* container = widget::createWindowContainer(view);
//I realized I dont need to do container->show(); for the main.qml to appear..
//use desktop widget to move the 2nd container to the 2nd screen...
我决定用类似的方法为我的 receive.qml
创建第二个应用程序引擎。我很快意识到即使使用 container2->show()
,receive.qml
也永远不会打开。现在,它显示的是一个空白页面。
我的问题是:
- 我的方法是否正确或是否有更好的解决方案?
- 我需要注意什么信号才能捕捉到 window 收盘
事件?当其中一个时,我似乎无法检测到信号
window 已关闭。因为我想在一个已经关闭时关闭两者
检测到。
这可以做得更简单,例如:
main.qml
import QtQuick 2.3
import QtQuick.Window 2.2
Item {
Window {
objectName: "wnd1"
visible: true
}
Window {
objectName: "wnd2"
visible: true
}
}
因此您可以从 C++ 代码访问这些 windows:
main.cpp
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QQuickWindow *wnd1 = engine.rootObjects()[0]->findChild<QQuickWindow *>("wnd1");
if(wnd1)
wnd1->setTitle("Server");
QQuickWindow *wnd2 = engine.rootObjects()[0]->findChild<QQuickWindow *>("wnd2");
if(wnd2)
wnd2->setTitle("Client");
要捕获关闭事件,您应该使用 QQuickWindow::closing 事件
我的项目要求在一个屏幕上显示两个 QML Window
(一个发送者,一个接收者)。 .qml
都要求我在其中包含一些 Cpp 模型,因此,我使用 QQmlApplicationEngine
来注册 Cpp 模型。
我发现使用 QWidget::createWindowContainer()
我可以为单个项目显示多个 Window
。这对于第一个 QML 文件来说工作得很好。代码片段如下所示:
QQmlApplicationEngine* engine = new QQmlApplicationEngine(Qurl("main.qml"));
QmlContext* context = engine.getContextProperty();
//do some Cpp models registering...
QQuickview *view = new QQuickview(engine,0);
QWidget* container = widget::createWindowContainer(view);
//I realized I dont need to do container->show(); for the main.qml to appear..
//use desktop widget to move the 2nd container to the 2nd screen...
我决定用类似的方法为我的 receive.qml
创建第二个应用程序引擎。我很快意识到即使使用 container2->show()
,receive.qml
也永远不会打开。现在,它显示的是一个空白页面。
我的问题是:
- 我的方法是否正确或是否有更好的解决方案?
- 我需要注意什么信号才能捕捉到 window 收盘 事件?当其中一个时,我似乎无法检测到信号 window 已关闭。因为我想在一个已经关闭时关闭两者 检测到。
这可以做得更简单,例如:
main.qml
import QtQuick 2.3
import QtQuick.Window 2.2
Item {
Window {
objectName: "wnd1"
visible: true
}
Window {
objectName: "wnd2"
visible: true
}
}
因此您可以从 C++ 代码访问这些 windows:
main.cpp
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QQuickWindow *wnd1 = engine.rootObjects()[0]->findChild<QQuickWindow *>("wnd1");
if(wnd1)
wnd1->setTitle("Server");
QQuickWindow *wnd2 = engine.rootObjects()[0]->findChild<QQuickWindow *>("wnd2");
if(wnd2)
wnd2->setTitle("Client");
要捕获关闭事件,您应该使用 QQuickWindow::closing 事件