使用cpp代码从加载的qml访问qml对象
Accessing qml objects from loaded qml using cpp code
我有一个main.qml,它使用加载器加载Page1.qml。如何从我的cpp代码中找到Page1.qml中的对象"whiteArea"?
我目前正在使用以下方法来获取一个对象,并希望获得加载的qml,就像这样。
QObject * object = engine.rootObjects().at(0)->findChild<QObject *> ("yourObjectName");
main.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"
}
}
}
第1页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文档:
可以使用项属性访问加载的对象。
因此,您应该在加载的项目中执行一些子搜索,例如:
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")
首先,给Loader一个对象名称属性,比如"Loader"。然后确保在运行以下代码时,loader.item设置为"Page1.qml",然后执行以下操作:
QObject* loader = m_engine->rootObjects()[0]->findChild<QObject*>("loader");
QObject* page= qvariant_cast<QObject *>(loader->property("item"));
QObject* whiteArea = page->findChild<QObject*>("whiteArea");
相关文章:
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 尝试在 qml 中访问结构成员的 QList
- 通过 id 访问 QML 插槽中的嵌套对象(从 c++ 调用)
- 使用 WebGL 使用 qml 访问客户端上的文件
- 如何从C++访问QML Surface3DSeries?
- 如何在 QML 中访问基于 QObjectList 的模型中的某些元素
- QT QML - 从另一个类访问 qml 模型
- 使用C 访问QT / QML对象
- 如何从qmlregistersingletontype的回调中访问QML加载项目
- 如何从 QML 访问 QModelIndex 行
- 从QML访问QStandardItemModel的项
- <T> 从 qml 访问 QList
- 如何从QML访问枚举
- 使用cpp代码从加载的qml访问qml对象
- QT/QML c++ 程序在从 QML 访问 QList 时崩溃
- 从QML访问C++函数
- 是否可以从qml访问持有QVariantMap的QScriptValue内部的任何内容
- 无法从 QML 访问C++ QObject 子类方法
- Qml访问列表视图项
- QML访问不可调用的函数