使用 QQuickView 或 QQmlApplicationEngine 在 ApplicationWindow 的页面之间切换
Use QQuickView or QQmlApplicationEngine to switch between pages from ApplicationWindow
我想使用 ApplicationWindow
作为主文件,并能够从 C++
和 QQuickView::setSource(const QUrl & url)
切换到其他 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
但是用法似乎不同,这个class只配备了QQmlApplicationEngine::load(const QUrl & url)
对我来说最好的行动方案是什么?我的 main.qml 文件中真的需要 ApplicationWindow
吗?
按照您的建议使用 QQmlApplicationEngine
,并按照您所说的使用 main.qml
,但使用内容页面 URL 从 C++ 设置上下文 属性,例如help.qml
- 然后在 Loader 的源 属性.
中绑定到此上下文 属性
这是从 C++ 控制 QML 的正常方法 - 公开上下文属性或具有属性的单例对象,从 C++ 驱动它们,并让 QML 绑定响应更改。
我想使用 ApplicationWindow
作为主文件,并能够从 C++
和 QQuickView::setSource(const QUrl & url)
切换到其他 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
但是用法似乎不同,这个class只配备了QQmlApplicationEngine::load(const QUrl & url)
对我来说最好的行动方案是什么?我的 main.qml 文件中真的需要 ApplicationWindow
吗?
按照您的建议使用 QQmlApplicationEngine
,并按照您所说的使用 main.qml
,但使用内容页面 URL 从 C++ 设置上下文 属性,例如help.qml
- 然后在 Loader 的源 属性.
这是从 C++ 控制 QML 的正常方法 - 公开上下文属性或具有属性的单例对象,从 C++ 驱动它们,并让 QML 绑定响应更改。