Qt中如何连接到QTcpSocket错误信号
How to connect to QTcpSocket error signal in Qt
我正在尝试通过使用信号和插槽来获取 QTcpSocket 错误。我喜欢这样:
connect(clientConnection->tcpSocket, &QTcpSocket::error, this, &ClientInterface::displayError);
void ClientInterface::displayError()
{
qDebug() << clientConnection->tcpSocket->error();
qDebug() << clientConnection->tcpSocket->errorString();
}
但是我得到这个错误:
error: no matching function for call to 'ClientInterface::connect(QTcpSocket*&, , ClientInterface*, void (ClientInterface::*)())'
connect(clientConnection->tcpSocket, &QTcpSocket::error, this, &ClientInterface::displayError);
我也试过用 QAbstractSocket::SocketError
参数实现插槽,如下所示:
void displayError(QAbstractSocket::SocketError);
但它显示了同样的错误。
我哪里做错了?
编辑:
正如答案所说,我尝试这样连接:
connect(clientConnection->tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), this, &ClientInterface::displayError);
但是我遇到了这个问题:
QObject::connect: Cannot queue arguments of type 'QAbstractSocket::SocketError'
(Make sure 'QAbstractSocket::SocketError' is registered using qRegisterMetaType().)
你需要重载QAbstractSocket错误:
connect(tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
this, &ClientInterface::displayError);
如前所述,您需要一些重载魔法并将 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)));
我正在尝试通过使用信号和插槽来获取 QTcpSocket 错误。我喜欢这样:
connect(clientConnection->tcpSocket, &QTcpSocket::error, this, &ClientInterface::displayError);
void ClientInterface::displayError()
{
qDebug() << clientConnection->tcpSocket->error();
qDebug() << clientConnection->tcpSocket->errorString();
}
但是我得到这个错误:
error: no matching function for call to 'ClientInterface::connect(QTcpSocket*&, , ClientInterface*, void (ClientInterface::*)())' connect(clientConnection->tcpSocket, &QTcpSocket::error, this, &ClientInterface::displayError);
我也试过用 QAbstractSocket::SocketError
参数实现插槽,如下所示:
void displayError(QAbstractSocket::SocketError);
但它显示了同样的错误。
我哪里做错了?
编辑:
正如答案所说,我尝试这样连接:
connect(clientConnection->tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), this, &ClientInterface::displayError);
但是我遇到了这个问题:
QObject::connect: Cannot queue arguments of type 'QAbstractSocket::SocketError' (Make sure 'QAbstractSocket::SocketError' is registered using qRegisterMetaType().)
你需要重载QAbstractSocket错误:
connect(tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
this, &ClientInterface::displayError);
如前所述,您需要一些重载魔法并将 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)));