[英]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 ++對象實例:
現在,一旦我接受了足夠的客戶端連接,我就想開始游戲並切換到狀態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
。
但是,我認為您的代碼中存在概念問題。 為什么你使用就像ElemA
和ElemB
對象,而不是該states
的財產Container
? 你為什么叫elemB.myClass = myClass
在ElemA.qml(源代碼ElemA
)? 解決此問題可能使您能夠編寫更簡單的內容,並避免使用myClass
此問題。 您能告訴我們更多有關您的代碼的信息嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.