[英]Use QQuickView or QQmlApplicationEngine to switch between pages from ApplicationWindow
我想將ApplicationWindow
用作主文件,並能夠使用QQuickView::setSource(const QUrl & url)
從C++
切換到其他QML
文件。 基本上,它將這樣做:
啟動=>加載main.qml ( ApplicationWindow
)=>單擊幫助按鈕=> C++
加載help.qml文件=>等等。
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
?
按照您的建議使用QQmlApplicationEngine
,並使用main.qml
,但是使用內容頁面URL從C ++設置上下文屬性,例如help.qml
然后在Loader的source屬性中綁定到此上下文屬性。
這是從C ++控制QML的正常方法-公開上下文屬性或具有屬性的單例對象,從C ++驅動它們,並使QML綁定響應更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.