QLocalServer不会启动传入连接

时间:2014-03-14 01:14:40

标签: c++ qt qtnetwork qt-signals qlocalserver

我在Qt中创建一个简单的QSocketServer。套接字开始监听,但似乎从不运行incomingConnection方法。有人可以解释这里有什么问题吗?

主要

m_pipeserver = new PipeServer(this);  
if (m_pipeserver->listen("test.sock")) { 
    qDebug() << "STARTED";
}

pipeserver.h

class PipeServer : public QLocalServer
{
    Q_OBJECT
public:
    PipeServer(Controller *parent = 0);
protected:
    void incomingConnection(qintptr socketDescriptor);

pipeserver.cpp

PipeServer::PipeServer(Controller *parent) 
{
}
void PipeServer::incomingConnection(qintptr socketDescriptor)
{
    qDebug() << "NEW CONNECTION";
    // etc...

我看到STARTED消息,但在运行时从未看到新的连接:

  

socat -v READLINE unix-connect:/tmp/test.sock

有谁能告诉我为什么incomingConnection没有被解雇?

- 更新:为了好玩,我将一个方法挂钩到newConnection信号,并且该方法在我连接时触发。那么为什么没有传递incomingConnection方法呢?

1 个答案:

答案 0 :(得分:2)

  

有谁能告诉我为什么incomingConnection没有被解雇?

米歇尔,你好像写了一个错字。可以读取上述虚拟保护方法的签名in here。该论点与您的变体之间存在细微差别。

修复方法是修改相应标头和来源中的声明和定义,如下所示:

void incomingConnection(quintptr socketDescriptor);
//                       ^

我建议开始使用Q_DECL_OVERRIDE宏,如下所示:

void incomingConnection(q**u**intptr socketDescriptor) Q_DECL_OVERRIDE;

这将确保在使用C ++ 11支持构建Qt应用程序时可以获得编译器错误,如果不支持,它将编译正常,但不会出错。它正在使用&#34;覆盖&#34; C ++ 11中引入的上下文说明符。