我在QML中遇到了关于MessageDialog
信号的问题。在我的MessageDialog
中,我有两个按钮分别用于选择是和否。我想将每个按钮与一个信号连接起来。
这是我的qml文件:
import QtQuick 2.2
import QtQuick.Dialogs 1.1
Item{
MessageDialog {
signal qmlYesSig(string msg)
signal qmlNoSig (string msg)
title: "Send data?"
icon: StandardIcon.Question
text: "Do you want to save your data on the online platform?"
detailedText: "Click Yes "
standardButtons: StandardButton.Yes | StandardButton.No
Component.onCompleted: visible = true
onYes: qmlYesSig("From yes")
onNo: qmlNoSig("From no")
}
}
这是我的插槽:
class MyClass : public QObject
{
Q_OBJECT
public slots:
void cppSlot(const QString &msg) {
qDebug() << "Called the C++ slot with message:" << msg;
}
};
这是我在主函数中如何使用它:
QQuickView view(QUrl::fromLocalFile("window.qml"));
QObject *item = view.rootObject();
AddData myClass;
QObject::connect(item, SIGNAL(qmlSignal(QString)),
&myClass, SLOT(cppSlot(QString)));
view.show();
我遇到了以下错误:
C2665: 'QObject::connect': 没有一种重载能够将所有参数类型转换
我已经尝试了多次,但无法使QML信号和C++槽函数正常工作。 同时,我也尝试了Qt文档中的示例,但仍然出现相同的错误。
是否有人可以给我一个思路,如何连接QML信号和C++槽函数以实现MessageDialog
?
qmlSignal
信号?不是在QObject *item = view.rootObject();
中。 - xanderview.rootObject()
并查看信号定义不在您的MessageDialog
中。所以要么在根Item
中定义它,要么在 C++ 中获取MessageDialog
子对象以连接信号。 - xanderqmlSignal
应该改为qmlYesSig
吗? - stefaanv