我目前正在重构我的代码,将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 ++端)以添加此回调块?