好的,我知道如何从 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 是游戏菜单,当我按下“选项”之类的按钮时,它会将我切换到 ElemOptions 状态,在那里我可以做一些其他事情)。
MyClass 是用于网络的 C++ 实现。现在的问题是我需要在 2 个状态(网络)之间有一个 c++ 对象实例:
- 第一个状态 (ElemA) 正在等待客户端连接并接受它们
- 2nd state (ElemB) 正在玩游戏
现在,一旦我接受了足够的客户端连接,我想开始游戏并切换到状态 ElemB,但我需要拥有相同的对象,以便我可以使用连接的客户端进行操作。
我尝试使用这种方法注入 myClass:viewer.rootContext()->setContextProperty("myClass", new MyClass()); 但后来我无法在 QML 中将“myClass”与Connections元素一起使用(说 myClass 属性未定义,但我可以像myClass.something()一样进行方法调用。
我现在正在考虑重新实现 MyClass,并使其成为静态的。然后我可以在 MyClass 的 ElemA 和 ElemB 实例中创建,但如果可能的话我宁愿不这样做。
QtMobility 现在不是我的选择。
我正在使用 QT 1.8.1 和 QtCreator 2.5