c++ - 从 C++ 访问现有 QML 组件

标签 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();
}

ma​​in.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"
}

最佳答案

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

关于c++ - 从 C++ 访问现有 QML 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42208485/

相关文章:

c++ - 在构造函数上启动线程时调用不匹配

c++ - 由于删除而崩溃(尝试处理异常...)

android - Android 上的 QML - C++ 适用于业务逻辑吗?

c++ - 如何从 C++ 代码在特定 QML 项的上下文中发出信号

python - QML 兼容多线程/异步调用吗?

c++ - 如何初始化一个以priority_queue为值的map与priority_queue的比较对象?

c++ - 字符数组到十六进制字符串的转换 - 意外输出

qt - 在QML ListView中的元素之间需要页边距

c++ - 如果某些实例不使用基类的属性,我是否应该继承子类?

c++ - Qt在QTableView中嵌入QListView