首页 文章

如何在Qt中连接到QTcpSocket错误信号

提问于
浏览
0

我试图通过使用信号和插槽来获取QTcpSocket错误 . 我喜欢这样:

connect(clientConnection->tcpSocket, &QTcpSocket::error, this, &ClientInterface::displayError);

void ClientInterface::displayError()
{
    qDebug() << clientConnection->tcpSocket->error();
    qDebug() << clientConnection->tcpSocket->errorString();
}

但是我收到了这个错误:

错误:没有匹配函数来调用'ClientInterface :: connect(QTcpSocket *&,ClientInterface *,void(ClientInterface :: *)())'connect(clientConnection-> tcpSocket,&QTcpSocket :: error,this,&ClientInterface: :displayError);

我也尝试使用 QAbstractSocket::SocketError 参数实现插槽,如下所示:
void displayError(QAbstractSocket::SocketError);
但它显示了同样的错误 .

我哪里做错了?

Edit:

我试图像这样联系,答案是:

connect(clientConnection->tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), this, &ClientInterface::displayError);

但我遇到了这个问题:

QObject :: connect:不能对'QAbstractSocket :: SocketError'类型的参数进行排队(确保使用qRegisterMetaType()注册'QAbstractSocket :: SocketError' . )

2 回答

  • 1

    您需要重载QAbstractSocket错误:

    connect(tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
    
                this, &ClientInterface::displayError);
    
  • 0

    如前所述,您将需要一些重载魔法并将QAbstractSocket :: SocketError注册为元类型 .

    这也在Qt文档中描述:

    Qt 5:http://doc.qt.io/qt-5/qabstractsocket.html#error

    Qt 4.8 http://doc.qt.io/archives/qt-4.8/qabstractsocket.html#error

    您也可以使用SIGNAL(...)宏而不是函数指针语法来克服此问题:

    例:

    QObject::connect(clientConnection->tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
    this, SLOT(displayError(QAbstractSocket::SocketError)));
    

相关问题