无法识别继承类的插槽

时间:2013-11-01 14:36:44

标签: c++ qt4 signals-slots

我正在尝试实现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;
}

2 个答案:

答案 0 :(得分:0)

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

你得到的警告有两件奇怪的事情;

  • 它抱怨QTcpSocket :: timeoutSlot()。我们不是尝试连接到QTcpSocket,而是连接到CustomSocket。警告应该提到这一点。如果没有,那么Q_OBJECT宏可能会丢失。
  • 如果我复制/粘贴代码并将其添加到空目录,请添加main(),然后使用qmake -project; QMAKE;使。它工作得很好。没有警告。

答案 1 :(得分: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并使用它的信号和插槽正常地与它通信。