簡體   English   中英

來自C ++對象的QML調用方法

[英]QML call method from C++ object

好的,我知道如何從QML調用C ++方法,但是在這種情況下它不起作用。

這是我的代碼的樣子(因為它很大,所以不是實際的代碼):

Container //this is my main qml element, where is everything contained and started
{
 ElemA
 {
  id: elemA
  ...
 }
 ElemB
 {
  id: elemB
  ...
 }
}

ElemA
{
 MyClass
 {
  id: myClass
  ...
 }
 //myClass.method() //runs fine

 //Now I call: elemB.myClass = myClass
 //after that, if I call method() it doens't work (below is code)
}

ElemB
{
 property MyClass myClass
 //myClass.method() //doesn't run at all, neither shows any errors or warnings
}

ElemA和ElemB基本上是狀態,我從中切換。 它是這樣的:一切都從狀態ElemA開始,然后我可以切換到ElemB,但是當我切換時,method()無法正常工作(如上所述,沒有錯誤或警告)。

我很確定當我放入“ elemB.myClass = myClass”時,出了點問題(或者也許是不允許的,但是以某種方式通過了), 換句話說,我不能將C ++對象作為屬性傳遞給其他元素(使用QML) )。

所以我的問題是我應該如何解決呢?


編輯:我的代碼實際上是游戲。 我有很多Elem,每個Elem代表一個狀態(例如,ElemMenu是游戲菜單,當我按下“ Options”之類的按鈕時,它將切換到ElemOptions狀態,在這里我可以做其他事情)。

MyClass是用於網絡的C ++實現。 現在的問題是,我需要在2個狀態(聯網)之間有一個c ++對象實例:

  • 1st狀態(ElemA)正在等待客戶端連接並接受它們
  • 第二狀態(ElemB)正在玩游戲

現在,一旦我接受了足夠的客戶端連接,我就想開始游戲並切換到狀態ElemB,但是我需要具有相同的對象,以便可以與連接的客戶端進行操作。


我試圖使用這種方法注入myClass: viewer.rootContext()-> setContextProperty(“ myClass”,new MyClass()); 但后來我無法在QML中將“ myClass”與Connections元素一起使用(說myClass屬性是未定義的,但是我可以像myClass.something()那樣進行方法調用。

我現在想的是重新實現MyClass,並使它靜態。 然后,我可以在MyClass的ElemA和ElemB實例中進行創建,但是如果可能的話,我寧願不要這樣做。

QtMobility暫時不適合我。

我在QtCreator 2.5中使用QT 1.8.1

為什么不在elemB的屬性上設置別名:

ElemB
{
    property alias myClassInElemB: myClass

    MyClass
    {
        id: myClass
        ...
    }
}

在您的代碼中,您可以這樣做: elemB.myClassInElemB = myClass

但是,我認為您的代碼中存在概念問題。 為什么你使用就像ElemAElemB對象,而不是該states的財產Container 你為什么叫elemB.myClass = myClass在ElemA.qml(源代碼ElemA )? 解決此問題可能使您能夠編寫更簡單的內容,並避免使用myClass此問題。 您能告訴我們更多有關您的代碼的信息嗎?

暫無
暫無

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

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