Qt の C++ から QML の id を取得する方法

QString QQmlContext::nameForObject(QObject *object) const を使うことで QML の id を取得することができます。

ちなみに QObject::property(“id”) では残念ながら取得できません。

サンプルコードはこんな感じになります。

#include <QtQml>

int main(int argc, char *argv[])
{
	QCoreApplication app(argc, argv);

	QQmlEngine engine;
	QQmlComponent component(&engine);
	component.setData("import QtQml 2.2\nQtObject { id: test }", QUrl());
	QObject *object = component.create();
	qDebug() << object->property("id");
	QQmlContext *context = qmlContext(object);
	qDebug() << context->nameForObject(object);

	return 0;
}
$ ./getid
QVariant(Invalid)
"test"