Ich bin ein Neuling in QML und kann ein einfaches Problem nicht lösen. Ich möchte Zugriff auf die QML-Komponenten von C++ erhalten, aber ich kann nicht. Der Zeiger test
ist immer 0. Was kann der Grund sein?Zugriff auf vorhandene QML-Komponente von C++
Der Code ist der folgende:
main.cpp
int main(int argc, char *argv[])
{
QGuiApplication &app=reg6::Bonder::BonderGuiApplication::instance();
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QObject* test=engine.rootObjects().first()->findChild<QObject*> ("cameraArea");
test->setProperty("color","black");
return app.exec();
}
main.qml
import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.0
ApplicationWindow {
visible: true
width: 1800
height: 900
SplitView
{
anchors.fill: parent
orientation: Qt.Vertical
SplitView {
Layout.fillHeight: true
SplitView {
orientation: Qt.Vertical
width:400
Layout.minimumWidth: 400
Layout.maximumWidth: 500
Camera {
id: cameraArea
height: 400
Layout.maximumHeight: 400
Layout.minimumHeight: 300
}
List {
id: listArea
}
}
Bonder {
id: mainArea
Layout.fillWidth: true
}
Properties {
id: propertiesArea
Layout.minimumWidth: 300
Layout.maximumWidth: 400
}
}
Error {
id: errorArea
Layout.minimumHeight: 100
height: 200
}
}
}
Camera.qml
import QtQuick 2.5
Rectangle {
color: "lightblue"
}
Ich denke, eine Antwort auf diese Frage kann ohne die ** Warnung ** aus der Dokumentation abzuschließen. Es ist nur der Absatz oberhalb der verknüpften Überschrift [hier] (http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html#accessing-members-of-a-qml-object-type-from -c). Es beginnt mit: ** Warnung: ** * Obwohl es möglich ist, mit C++ auf QML-Objekte in der Objektbaumstruktur zuzugreifen und sie zu manipulieren, empfehlen wir, diesen Ansatz nicht außerhalb von Anwendungstests und Prototyping zu verwenden. ] * – derM
@derM Tatsächlich ist der umgekehrte Weg viel besser. –
@derM Sie haben Recht, aber es beantwortet nicht die Frage ** Lecko ** gefragt, so dass die Antwort für jetzt abgeschlossen ist. – Redanium