我想使用ApplicationWindow
作为主文件,并能够使用QML
切换到C++
的其他QQuickView::setSource(const QUrl & url)
个文件。基本上它会这样做:
启动=>加载 main.qml (ApplicationWindow
)=>点击帮助按钮=> C++
加载 help.qml file =>等
int main(int argc, char *argv[])
{
QApplication app{argc, argv};
CustomQQuickView view;
view.setSource(QUrl{"qrc:/main.qml"});
view->show();
return app.exec();
}
main.qml
ApplicationWindow
{
visible: true
width: 640
height: 480
Loader
{
anchors.fill: parent
id: mainPageLoader
}
Button
{
text: "Help"
onClicked: { mainPageLoader.source = "help.qml"}
}
}
(我想知道这里是否真的需要Loader
)
但是QQuickView
仅支持加载源自QQuickItem
的根对象。因此,它不适用于ApplicationWindow
。
我正在考虑使用QQmlApplicationEngine
代替QQuickView
,但使用情况似乎有所不同,此类仅配备QQmlApplicationEngine::load(const QUrl & url)
对我来说,最好的行动方案是什么?我的 main.qml 文件中是否真的需要ApplicationWindow
?
答案 0 :(得分:3)
按照您的建议使用QQmlApplicationEngine
,并按照您的说法使用main.qml
,但使用内容页网址设置C ++的上下文属性,例如: help.qml
- 然后绑定到Loader的源属性中的此context属性。
这是从C ++控制QML的常规方法 - 使用属性公开上下文属性或单例对象,从C ++驱动它们,并让QML绑定响应更改。