如何将此SIGNAL和SLOT转换为qt5 connect呼叫?

时间:2019-05-06 03:37:16

标签: c++ qt qt5

我想使用此老式connect调用的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);

1 个答案:

答案 0 :(得分:2)

根据docs

  

注意:此类中信号错误超载。连接到此   通过使用函数指针语法发出信号,Qt提供了一个方便的方法   如以下示例所示,用于获取函数指针的帮助器:

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

因此,您的解决方案是:

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