[英]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.