Я хотел бы использовать 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 файл?
использование QQmlApplicationEngine
как вы предлагаете, и с main.qml
как вы говорите, но установите свойство контекста в C ++ с помощью URL страницы содержимого, например, help.qml
— затем привязать к этому свойству контекста в свойстве источника Загрузчика.
Это нормальный способ управления QML из C ++ — показывать свойства контекста или одноэлементные объекты со свойствами, извлекать их из C ++ и заставлять привязки QML реагировать на изменения.
Других решений пока нет …