我有一个 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/