Используйте QQuickView или QQmlApplicationEngine для переключения между страницами из ApplicationWindow
Я хотел бы использовать ApplicationWindow
как основной файл и иметь возможность переключаться на другие QML
файлы из C++
с QQuickView::setSource(const QUrl & url)
, В основном это сделало бы это:
запуск => загружает 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)
Какой будет лучший курс действий для моей цели? Мне действительно нужно ApplicationWindow
в моем файле main.qml?
1 ответ
Использование QQmlApplicationEngine
как вы предлагаете, и с main.qml
как вы говорите, но установите свойство контекста из C++ с URL страницы содержимого, например help.qml
- затем привязать к этому свойству контекста в свойстве источника Загрузчика.
Это нормальный способ управления QML из C++ - предоставление свойств контекста или одноэлементных объектов со свойствами, извлечение их из C++ и привязка QML к изменениям.