簡體   English   中英

將QObject指針從QML對象傳遞到C ++

[英]Passing QObject pointer from a QML object to C++

我在Qt / C ++中有一個發布者/訂閱者鍵值數據庫類。 訂閱者可以通過傳遞鍵(字符串),其QObject指針和屬性來進行連接。 每當訂閱的鍵的值更改時,訂閱的QObject的屬性就會更改為新值。 在Qt / C ++中可以正常工作。

現在,我想在QML中進行查看。 是否可以將QML傳遞給具有3個參數的對象的C ++:

  • QML對象的QObject指針
  • 屬性為字符串
  • DB鍵作為字符串

最好的解決方案是,好像該屬性連接到另一個屬性:

Item{ myQmlProp: MyCppInst("myDBKey") }

編輯當前有效的是此解決方案:

Item{ 
   id:myqmlitem
   myQmlProp: MyCppInst("myDBKey","myQmlProp",myqmlitem) 
}

或像這樣:

Item{ 
   id:myqmlitem
   Component.onCompleted:{
      MyCppPublisher.subscribe("myDBKey1","myQmlProp1",myqmlitem)
      MyCppPublisher.subscribe("myDBKey2","myQmlProp2",myqmlitem)  
   }
}

與首選解決方案相比,我必須顯式傳遞連接的屬性名稱和QML項目實例。 沒關系,非常感謝您的回答! 我希望使用QML的this -Keyword,但已經了解到,它目前在QML中未定義:-(

只需給對象一個id並將該id傳遞給函數,它將在C ++方面變成QObject * 然后,您可以使用元系統按名稱訪問屬性:

// qml
Item {
  id: someitem
  ...
  CppObj.cppFoo(someitem)
}

// c++
void cppFoo(QObject * obj) {
  ...obj->property("myDBKey")...
}

引用也可以,例如children[index]

您可以做的是一個僅將dbkey作為參數的函數,然后返回一個QObject*並使用READ函數和NOTIFY信號公開Q_PROPERTY

這樣,您只需要用notify信號告知值已更改,並且QML將自動調用read函數。

可以像Item{ myQmlProp: MyCppInst("myDBKey").value }

如果您在編譯時知道db鍵,則可以直接在MyCppInst為每個鍵添加屬性,或者如果在創建cpp類時知道它們,則可以將它們放在QQmlPropertyMap 用法是這樣的: Item { myQmlProp: MyCppInst.myDbKey } (如果需要在QML方面保持動態,則可以使用MyCppInst["myDbKey"] )。

暫無
暫無

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

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