加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何将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();

它给了我错误:

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")
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读