我正在尝试实现QTcpSocket
的自定义类,但似乎我的插槽在运行时无法识别我总是得到:
Object::connect: No such slot QTcpSocket::timeoutSlot()
这是我的代码:
我的标题:
#ifndef CUSTOM_SOCKET_H
#define CUSTOM_SOCKET_H
#include <QTcpSocket>
#include <QTimer>
class CustomSocket : public QTcpSocket {
Q_OBJECT
public:
CustomSocket(QObject* = 0);
private:
QTimer *mAuthTimeout;
public slots:
void timeoutSlot();
};
#endif
执行:
#include "customSocket.h"
CustomSocket::CustomSocket(QObject *aParent):QTcpSocket(aParent)
{
mAuthTimeout = new QTimer();
connect(mAuthTimeout, SIGNAL(timeout()), this, SLOT(timeoutSlot()));
mAuthTimeout->start(5000);
}
void CustomSocket::timeoutSlot(){
std::cout << "Timeout " << std::endl;
}
上面引用的代码没有任何问题。
你得到的警告有两个奇怪的事情;
查看QTcpSocket类,它是用Q_DISABLE_COPY宏声明的。这可能会导致您看到的错误。
无论是否是这种情况,我认为你最好不要继承QTcpSocket,而是在你的类中创建一个实例: -
class CustomSocket : public QObject
{
Q_OBJECT
private:
QTCPSocket* m_pSocket;
};
CustomSocket::CustomSocket(QObject* parent)
:QObject(parent)
{
m_pSocket = new QTcpSocket(this);
}
然后你应该可以连接到QTcpSocket并使用它的信号和插槽正常与它通信。