繁体   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