这是我的代码(不编译,说:“在main.cpp中标记连接时,在'','token'之前预期的primary-expression)
的main.cpp
QObject *myButton = engine.rootObjects().first() -> findChild<QObject*>("btn");
QObject::connect(myButton, SIGNAL(clicked()), MyClass, SLOT(MyClass()));
main.qml
ApplicationWindow {
id: appWindow
visible: true
width: 850; height: 500
Button
{
objectName: btn
anchors.centerIn: parent
}
}
我希望每次点击按钮时都能实例化cpp类MyClass 。
我之前做过不同的事情,但它在应用程序运行时遇到了实例化MyClass的问题,而不是单击按钮时的问题。此外,我无法仅调用构造函数,而只调用Q_INVOKABLE公共方法。
的main.cpp
MyClass myClass;
engine.rootContext() -> setContextProperty("_btn", &myClass);
main.qml
ApplicationWindow {
id: appWindow
visible: true
width: 850; height: 500
Button
{
objectName: btn
anchors.centerIn: parent
onClicked: _btn.myMethod() //where myMethod is a Q_INVOKABLE public method belonging to MyClass.
}
}
答案 0 :(得分:2)
请查看QObject::connect
定义
QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
参数1和3是基于QObject的类的实例(不是你在代码片段中定义的那样),所以你需要一个类的实例来使用信号槽机制。这就是编译失败的原因。
要完成任务,您必须创建一些&#34;代理&#34; class和connect to是slot,您将动态创建MyClass
。