c++ - 使用cpp代码从加载的qml访问qml对象

标签 c++ qt qml

我有一个 main.qml,它使用加载程序加载 Page1.qml。如何从我的 cpp 代码中找到 Page1.qml 中的对象“whiteArea”?

我目前正在使用以下方法来获取对象,并且也想像这样获取加载的 qml。

QObject * object = engine.rootObjects().at(0)->findChild<QObject *>  ("yourObjectName");

主.qml

import QtQuick 2.3
import QtQuick.Controls 1.2
import myplugin 1.0

ApplicationWindow {
    id:app
    visible: true
    width: 640
    height: 480
    title: qsTr(" World")
    objectName: "Appwindow"
    property ApplicationWindow appwindow:app
    Label {
        objectName: "label"
        text: qsTr(" World")
        anchors.centerIn: parent
    }

    MyItemTest{
        objectName: "myItem"
        anchors.fill: parent
    }

    Rectangle{
        objectName: "Rectangle"
        id:rect
        width: 50
        height: 50
        color: "yellow"
    }

    Button {
        objectName: "MyButton"
        id: btnClick
        text : "btn"
        Loader { id: pageLoader }
        onClicked: {
            pageLoader.source = "Page1.qml"

        }
    }
}

Page1.qml

import QtQuick 2.0
import QtQuick 2.3
import QtQuick.Controls 1.2
import myplugin 1.0

Item {
    Rectangle{
        objectName: "whiteArea"
        id:rect
        width: 50
        height: 50
        color: "white"
    }
}

最佳答案

来自Qt documentation :

The loaded object can be accessed using the item property.

所以你应该在加载的项目中做一些子搜索,例如:

QObject * loader = engine.rootObjects().at(0)->findChild<QObject*>("loader");
qWarning() << loader;
QObject * item = qvariant_cast<QObject*>(QQmlProperty::read(loader,"item"));
qWarning() << item;
QObject *whiteArea = item->findChild<QObject *>("whiteArea");
qWarning() << whiteArea;

输出:

QQuickLoader(0x24918240, name = "loader")
QQuickItem(0x24919740)
QQuickRectangle(0x24919728, name = "whiteArea")

关于c++ - 使用cpp代码从加载的qml访问qml对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36418941/

相关文章:

c++ - 为什么将一个对象发送到此函数中,但从未使用过?

javascript - 为什么QML Image占用这么多内存?减慢应用程序

c++ - 使用 QTimeline 制作动画

qt - QML ListView 的不同代表

c++ - 使用动态创建的选项卡元素在 C++ 和 QML 之间进行绑定(bind)

c++ - 使用 WM_USER、WM_APP 或 RegisterWindowMessage

c++ - MATLAB 代码与 C/C++ 集成时出现 fatal error

qt - 如何使用OpenCV VideoCapture从Firewire(精确来说是Fire-i 630c)摄像机读取帧

python - PySide2 + QML : QApplication: invalid style override passed, 忽略它

c++ - 对删除分配给结构数组的动态内存感到困惑