1

我正在编写一个简单的EchoServer类,继承自QTcpServer. 当我在构造函数中连接信号和槽时,它并不顺利。

class EchoServer : public QTcpServer {
  //Q_OBJECT
public:
  EchoServer(int listenling_port) {
    this->listen(QHostAddress(), listenling_port);
    connect(this, SIGNAL(newConnection()), this, SLOT(HandleIncomingConnection()));
  }
public slots:
  void HandleIncomingConnection() {
    auto echo_handler = EchoServerHandler(this->nextPendingConnection());
    echo_handler.Echo();
  }
private:
};

该应用程序确实侦听端口,并且可以远程登录。但是控制台显示

QObject::connect: 没有这样的插槽 QTcpServer::HandleIncomingConnection() ”,

似乎它被识别this为基类QTcpServer指针。

此外,如果我留Q_OBJECT在代码中,它不会编译,说

"错误 LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall EchoServer::metaObject(void)const " (?metaObject@EchoServer@@UBEPBUQMetaObject@@XZ) ",

他们有关系吗?

4

2 回答 2

2

您需要保留Q_OBJECT您的代码,并且您需要一个析构函数来与您的课​​程一起使用。

您可能需要在代码上运行“清理项目”来修复该链接器错误。

还要检查Q_OBJECT 链接器错误!

希望有帮助。

于 2013-04-25T04:12:54.177 回答
0

链接Q_OBJECT 链接器错误!在phyatt的回答中帮助我找到了问题。所以我会自己回答这个问题。

问题中的代码完全放在一个main.cpp文件中,这阻止了 Qt 的元处理。把类定义放到单独的hpp头文件中重新编译,问题就解决了。我正在使用 Visual Studio 2012 + Qt 5.0。

于 2013-04-25T06:45:40.853 回答