我正在寻找一种方法来检索不属于C ++基类型的qml项属性。 我发现了这个:
QWindow *w = (QWindow *)engine.rootObjects().first();
QVariant p = w->property("color");
但结果是QVariant的一个实例。我想获得像activeFocusItem
这样的属性。
答案 0 :(得分:0)
实际上,如果您对activeFocusItem
使用所需的toT()
函数,则可以获得QVariant
的值。
在你的情况下它应该是
QQuickWindow *w = (QQuickWindow*) engine.rootObjects().first();
qDebug() << w->activeFocusItem()->property("activeFocus").toBool(); // true obviously
qDebug() << w->activeFocusItem()->property("objectName").toString();
在此代码中,我们获取了属性activeFocus
和objectName
,但它只是一个示例。
另一种方式,
QQuickWindow *w = (QQuickWindow*) engine.rootObjects().first();
QQuickItem *wi = w->property("activeFocusItem").value<QQuickItem*>();
qDebug() << wi->property("activeFocus").toBool();
qDebug() << wi->property("objectName").toString();
因为C ++禁止工会包含具有非默认值的类型 构造函数或析构函数,最有趣的Qt类不可能 在工会中使用。没有QVariant,这将是一个问题 QObject :: property()和数据库工作等
通常,您使用信号与C ++交互。在这种情况下,当QML对象类型用作信号参数时,参数应使用var作为类型,并且应使用QVariant
类型在C ++中接收值。更多信息和示例here。
所以QVariant
是必要的,正如我之前所说的那样,正确的方法是在Q ++中使用QML对象。
我是uploaded GitHub的完整示例。我希望这对你有帮助。