无法识别继承类的插槽

问题描述 投票:0回答:2

我正在尝试实现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;
}
c++ qt4 signals-slots
2个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.