Я пытался изучить QtQuick для создания графического интерфейса, но мне было трудно понять, как взаимодействовать с объектами QML из части С++ моей тестовой программы.
Вот мой простой файл QML:
import QtQuick 2.2
import QtQuick.Window 2.1
Window {
id: mainWindow
visible: true
width: 800
height: 800
color: "#FFFF0000"
MouseArea {
anchors.fill: parent
onClicked: Qt.quit()
}
Rectangle {
id: testRect
width: 100
height: 100
anchors.centerIn: parent
color: "#FF0000FF"
}
}
Вот базовый файл С++, который пришел с ним (автоматически сгенерированный QtCreator):
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
return app.exec();
}
Моя проблема в том, что я понятия не имею, как получить доступ к моему QML-объекту Window, и в результате я не могу изменить какие-либо его свойства или свойства своих детей! Эта часть документации QtQuick показывает два метода доступа к объектам QML из кода С++, но ни один из них, похоже, не применяется к этой схеме загрузки "QQmlApplicationEngine". Я также видел, что люди используют такие вещи, как "QApplicationViewer" и "QDeclaritiveView", но я не могу найти их в официальной документации вообще.
Меня сильно расстраивает QtQuick; "простота" QML кажется утраченной в море противоречивой документации и запутанном интерфейсе между С++ и QML. Есть ли в любом случае для меня доступ к моим объектам QML при использовании метода QQmlApplicationEngine? Я попытался использовать "QuickView", но, похоже, он не работает с объектами Window QML.? Является ли QQmlApplicationEngine полезным только для приложений только для QML в одном файле? До сих пор каждый фрагмент документации и учебника, который я прочитал, показал что-то другое.
Любая помощь или разъяснение будут оценены. В идеале я хотел бы узнать, как получить доступ и изменить объекты QML (например, "mainWindow", "testRect" и другие объекты в других файлах) через мой код на С++.