2

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

主要的:

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

管道服务器.h

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

管道服务器.cpp

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

我看到 STARTED 消息,但在运行时从未看到 NEW CONNECTION:

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

谁能告诉我为什么incomingConnection 没有触发?

- 更新:只是为了好玩,我将一个方法连接到 newConnection 信号中,当我连接时该方法会触发。那么为什么没有调用incomingConnection 方法呢?

4

1 回答 1

2

谁能告诉我为什么incomingConnection 没有触发?

米歇尔,看来你打错了。上述虚拟保护方法的签名可以在这里读到。该论点与您的变体之间存在细微差别。

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

void incomingConnection(quintptr socketDescriptor);
//                       ^

我建议Q_DECL_OVERRIDE按如下方式开始使用宏:

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

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

于 2014-03-14T06:25:31.233 回答