[英]How to get a activeFocusItem property in qml from main.cpp?
我正在尋找一種檢索qml項目屬性的方法,這些屬性不在C ++中的基本類型中。 我發現了這一點:
QWindow *w = (QWindow *)engine.rootObjects().first();
QVariant p = w->property("color");
但是結果是QVariant的一個實例。 我想獲取諸如activeFocusItem
屬性。
好吧,實際上,如果對QVariant
使用必需的toT()
函數,則可以獲取activeFocusItem
的值。
在你的情況下,它應該像
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作為類型,並且應在C ++中使用QVariant
類型接收該值。 更多信息和示例在這里 。
因此, QVariant
是必要的,正如我在獲得在C ++中使用QML對象的正確方法之前所述。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.