QT - 连接Qml按钮单击以指向Cpp构造函数

时间:2017-08-25 15:23:39

标签: c++ qt qml signals-slots

这是我的代码(不编译,说:“在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.
}
}

1 个答案:

答案 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