我需要解析一个QML树,并从中获取所有QML对象的id
。我注意到id
的行为不像普通属性(请参见下面的示例)–从obj->property
调用返回的值是无效的QVariant
。
我的问题是–有没有办法以某种怪异(但可复制)的方式检索对象的id
?
简化示例:
main.qml:
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
visible: true
Item {
id: howToGetThis
objectName: "item"
}
}
main.cpp:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QTimer>
#include <QDebug>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
QTimer::singleShot(1000, [&]() {
auto item = engine.rootObjects()[0]->findChild<QObject*>("item");
qDebug() << item->property("objectName");
qDebug() << item->property("id");
});
return app.exec();
}
输出:
QVariant(QString, "item")
QVariant(Invalid)
答案 0 :(得分:2)
我认为您需要的是
QString QQmlContext::nameForObject(QObject *object)
您可以在此处找到说明: https://doc.qt.io/qt-5/qqmlcontext.html#nameForObject
在此上下文中返回对象的名称,如果在上下文中未命名对象,则返回一个空字符串。在QML创建的上下文中,对象由setContextProperty()命名,或者由IDs 命名。 。