javascript - 来自 C++ 对象的 QML 调用方法

标签 javascript c++ qt qml

好的,我知道如何从 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++ 实现。 现在的问题是我需要在两种状态(网络)之间拥有一个 c++ 对象实例:

  • 第一个状态 (ElemA) 正在等待客户端连接并接受它们
  • 第二状态 (ElemB) 正在玩游戏

现在,一旦我接受了足够多的客户端连接,我就想开始游戏并切换到状态 ElemB,但我需要有相同的对象,这样我才能对连接的客户端进行操作。


我尝试使用此方法注入(inject) 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

最佳答案

为什么不在 elemB 上为您的属性(property)设置别名:

ElemB
{
    property alias myClassInElemB: myClass

    MyClass
    {
        id: myClass
        ...
    }
}

在您的代码中,您可以这样做:elemB.myClassInElemB = myClass

但是,我认为您的代码中存在概念问题。为什么您只使用 ElemAElemB 对象而不是 Containerstates 属性?为什么在 ElemA.qml(ElemA 的源代码)中调用 elemB.myClass = myClass?解决这个问题可能会让你写出更简单的东西,避免 myClass 出现这个问题。你能告诉我们更多关于你的代码的信息吗?

关于javascript - 来自 C++ 对象的 QML 调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12081241/

相关文章:

c++ - 用 const 限定符更改替换方法 (C++)

javascript - Webpack 分块。没有内容出现 - block 未加载

c++ - gcc 报告基于版本的库的未引用符号

javascript - 使用智能表搜索按钮点击事件的数据

c++ - 如何使用类型未知的成员创建一个可以在列表/vector 中使用的类?

Qt Installer Framework Controller 函数未被调用

qt - 音频Qml失败

c++ - 如何使用Meego touch主题

javascript - 创建一个函数,该函数返回一个数组,其中包含从 5 到 118 的所有奇数

javascript - NodeJS、MariaDB 池连接提交不起作用