这是我的qml文件:
import QtQuick 2.2import QtQuick.Dialogs 1.1Item{ 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_OBJECTpublic 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();
它给了我错误:
C2665: ‘QObject::connect’: none of the 3 overloads Could convert all the argument types
我已经尝试了很多次但是我无法工作QML信号和C插槽.
此外,我从这里尝试了Qt doc的例子并给了我同样的错误.
有人可以告诉我如何为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") }}总结
以上是内存溢出为你收集整理的如何将QML信号与C插槽连接?全部内容,希望文章能够帮你解决如何将QML信号与C插槽连接?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)