将回调连接到用C ++

时间:2018-01-25 20:47:11

标签: c++ callback singleton qml signals

我目前正在重构我的代码,将QML中声明和实例化的QObject替换为已注册并初始化为SingletonType的QObject。以下是旧代码的样子:

main.cpp:

int main(int argc, char* argv[]) {
  qmlRegisterType<MyClass>("MyPackage", 1, 0, "MyClass");
  etc.
}

班级.cpp:

Class MyClass : public QObject {
  Q_OBJECT
  signals:
    void dataAvailable(const QString dataId);
    etc.
}

main.qml:

import MyPackage 1.0
ApplicationWindow {
  MyClass {
    id: myClass

    onDataAvailable {
      // Do stuff here
    }
  }
}

以下是新代码的样子:

main.cpp:

static MyClass* myClass_ = new MyClass();
// Create singleton
static QObject *mySingleton_((QQmlEngine* engine, QJSEngine* scriptEngine) {
  Q_UNUSED(engine)
  Q_UNUSED(scriptEngine)

  return myClass_;
}
int main(int argc, char* argv[]) {
  qmlRegisterSingletonType<MyClass>("MyPackage", 1, 0, "MyClass", mySingleton_);
  etc.
}

类.cpp(未更改):

Class MyClass : public QObject {
  Q_OBJECT
  signals:
    void dataAvailable(const QString dataId);
    etc.
}

main.qml:

import MyPackage 1.0
ApplicationWindow {
  Connections {
    target: MyClass
    onDataAvailable: {
      console.error("onDataAvailable")
    }
  }
}

MyClass之前的所有功能都可以正常使用这个新的Singleton设置。但是,onDataAvailable块未被命中,因为上面的console.error语句从不打印。我已经确认信号正在正确发射。我相信这里的问题是上面的Connections代码,这可能是错误的。

如何正确使用Connections?如果失败了,是否可以手动将QML注入此对象(从C ++端)以添加此回调块?

0 个答案:

没有答案