如何将QML信号与C插槽连接?
发布时间:2020-12-16 10:06:20 所属栏目:百科 来源:网络整理
导读:我在QML中遇到MessageDialog信号问题.在我的MessageDialog中,我有两个用于是和否的按钮.我想用信号连接每个按钮. 这是我的qml文件: import QtQuick 2.2import QtQuick.Dialogs 1.1Item{ MessageDialog { signal qmlYesSig(string msg) signal qmlNoSig (str
我在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; } }; 以下是我在main中如何使用它: QQuickView view(QUrl::fromLocalFile("window.qml")); QObject *item = view.rootObject(); AddData myClass; QObject::connect(item,SIGNAL(qmlSignal(QString)),&myClass,SLOT(cppSlot(QString))); view.show(); 它给了我错误:
我已经尝试了很多次但是我无法工作QML信号和C插槽. 有人可以告诉我如何为MessageDialog连接QML信号和C插槽吗? 解决方法
您的QML文件是:
Item{ MessageDialog { signal qmlYesSig(string msg) signal qmlNoSig (string msg) [...] } } 你的C代码是: QObject *item = view.rootObject(); AddData myClass; QObject::connect(item,SLOT(cppSlot(QString))); 这意味着您正在QML文件的根项中查找名为“qmlSignal”的信号. Item{} 如您所见,没有称为“qmlSignal”的信号. 您必须在根项目中定义信号并从消息框中发出它. Item{ signal qmlSignal(string msg) MessageDialog { onYes: parent.qmlSignal("From yes") onNo: parent.qmlSignal("From no") } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |