ang*_*alo 6 qt qwidget qml qtquick2 qquickview
我要求我的项目Window在一个屏幕上显示两个QML (一个发送者,一个接收者).两者都.qml要求我在里面包含一些Cpp模型,因此我QQmlApplicationEngine用来注册Cpp模型.
我发现使用QWidget::createWindowContainer()我能够Window为一个项目显示多个s.这适用于第一个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...
Run Code Online (Sandbox Code Playgroud)
我决定receive.qml用类似的方法为我创建第二个应用程序引擎.我很快意识到,receive.qml即使有了,也永远不会打开container2->show().现在,它显示一个空页面.
我的问题是:
fol*_*bis 13
这可以更容易,例如:
main.qml
import QtQuick 2.3
import QtQuick.Window 2.2
Item {
Window {
objectName: "wnd1"
visible: true
}
Window {
objectName: "wnd2"
visible: true
}
}
Run Code Online (Sandbox Code Playgroud)
所以你可以从C++代码访问这些窗口:
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");
Run Code Online (Sandbox Code Playgroud)
要捕获结束事件,您应该使用QQuickWindow :: closing事件
| 归档时间: |
|
| 查看次数: |
7351 次 |
| 最近记录: |