0

我正在尝试实现一个自定义类,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;
}
4

2 回答 2

0

上面引用的代码没有任何问题。

您收到的警告有两件奇怪的事情;

  • 它抱怨 QTcpSocket::timeoutSlot()。我们不是试图连接到 QTcpSocket,而是连接到 CustomSocket。警告应该提到这一点。如果没有,则可能缺少 Q_OBJECT 宏。
  • 如果我复制/粘贴代码并将其添加到空目录,添加 main(),然后使用 qmake -project;qmake; 制作。它工作得很好。没有警告。
于 2013-11-02T09:38:19.217 回答
0

查看 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 并使用它的信号和插槽与其通信。

于 2013-11-04T15:27:04.457 回答