2013-04-25 39 views
0

我正在编写一个简单的EchoServer类,它继承自QTcpServer。当我在构造函数中连接信号和插槽时,它不会很好。在派生的QObject构造函数中连接Qt信号和插槽

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: 
}; 

应用程序确实监听端口,并且可以通过telneted。但控制台显示

的QObject ::连接:没有这样的槽QTcpServer既可:: HandleIncomingConnection()”,这似乎它被识别this作为基类QTcpServer指针,

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

错误LNK2001:无法解析的外部符号‘市民:虚拟结构QMetaObject常量* __thiscall的EchoServer ::元对象(无效)常量’( ?metaObject @ EchoServer @@ UBEPBUQMetaObject @@ XZ)“,

它们是相关的吗?

+0

可能重复[Q \ _OBJECT链接器错误!](http://stackoverflow.com/questions/3264259/q-object-linker-error) – sashoalm 2013-04-25 06:57:29

+0

@sashoalm尽管链接有帮助。该链接中的答案不能解决问题,因此不是重复的。 – WiSaGaN 2013-04-25 07:06:59

回答

2

您需要在代码中保留Q_OBJECT,并且需要使用析构函数才能与您的课程一起使用。

您可能需要在代码上运行“Clean Project”以修复该链接器错误。

还检查了Q_OBJECT linker error!

希望有所帮助。

+0

谢谢。链接有帮助。 – WiSaGaN 2013-04-25 06:40:07

0

在phyatt的答案中的链接Q_OBJECT linker error!帮助我找到问题。所以我会自己回答。

问题中的代码完全放入一个main.cpp文件中,该文件阻止Qt的元处理。将类定义放入单独的hpp标题并重新编译,问题就消失了。我正在使用Visual Studio 2012 + Qt 5.0。