Используйте 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 файл?

2

Решение

использование QQmlApplicationEngine как вы предлагаете, и с main.qml как вы говорите, но установите свойство контекста в C ++ с помощью URL страницы содержимого, например, help.qml — затем привязать к этому свойству контекста в свойстве источника Загрузчика.

Это нормальный способ управления QML из C ++ — показывать свойства контекста или одноэлементные объекты со свойствами, извлекать их из C ++ и заставлять привязки QML реагировать на изменения.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]