2017-02-13 5 views
0

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" 
} 

Antwort

1

Sie haben die objectNameEigenschaft auch der QML Komponente setzen einen gültigen Zeiger auf Ihre QObject zu bekommen, weil T QObject::findChild(const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const die benötigt objectName nicht die ID

+1

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

+0

@derM Tatsächlich ist der umgekehrte Weg viel besser. –

+0

@derM Sie haben Recht, aber es beantwortet nicht die Frage ** Lecko ** gefragt, so dass die Antwort für jetzt abgeschlossen ist. – Redanium

Verwandte Themen