【问题标题】:How to convert this SIGNAL and SLOT to qt5 connect call?如何将此 SIGNAL 和 SLOT 转换为 qt5 连接调用?
【发布时间】:2019-05-06 03:37:15
【问题描述】:

我想使用这个旧式连接调用的 qt5 样式:

connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this,
    SLOT(erreurSocket(QAbstractSocket::SocketError)));

我试过了

connect(socket, &QTcpSocket::error, this, &FenClient::erreurSocket);

没有成功:

候选函数不可行:第二个参数没有匹配“const char*”的“错误”重载

FenClient.cpp

FenClient::FenClient()
{
    setupUi(this);

    socket = new QTcpSocket(this);
    connect(socket, &QTcpSocket::error, this, &FenClient::erreurSocket);

FenClient.h

private slots:
    void erreurSocket(QAbstractSocket::SocketError erreur);

【问题讨论】:

    标签: c++ qt qt5


    【解决方案1】:

    根据docs

    注意:这个类中重载了信号错误。连接到这个 通过使用函数指针语法发出信号,Qt 提供了一个方便的 获取函数指针的助手,如本例所示:

    connect(abstractSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
        [=](QAbstractSocket::SocketError socketError){ /* ... */ });
    

    所以在你的情况下,解决方案是:

    connect(socket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), this, &FenClient::erreurSocket);
    

    【讨论】:

    • 除此之外,QOverload 是在 Qt 5.7 中添加的。 Qt 5 的早期版本需要一个 static_cast,如 here 所示,以在重载信号/插槽之间进行选择。
    猜你喜欢
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多