从C ++访问现有的QML组件

时间:2017-02-13 16:07:51

标签: c++ qt qml

我是QML的新手,无法解决一个简单的问题。我想从C ++访问QML组件,但我不能。 指针test始终为0.可能是什么原因?

代码如下:

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

1 个答案:

答案 0 :(得分:1)

您还必须设置 QML组件objectName 属性,以获取指向QObject的有效指针,因为{{1} }需要T QObject::findChild(const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const而不是 ID