簡體   English   中英

如何從main.cpp獲取qml中的activeFocusItem屬性?

[英]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();

在這段代碼中,我們獲得了屬性activeFocusobjectName ,但這只是一個例子。

其他方式,

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對象的正確方法之前所述。

我已經完整的示例上傳到GitHub。 希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM