我正在Qt中创建一个简单的QSocketServer .套接字开始侦听,但传入连接方法似乎从未运行。有人能解释一下这里出了什么问题吗?
主: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消息,但当我运行时从未看到NEW CONNECTION:
socat -v READLINE unix-connect:/tmp/test.sock
谁能告诉我为什么传入连接没有触发?
——更新:只是为了好玩,我钩了一个方法到newConnection信号,该方法在我连接时触发。那么为什么incomingConnection方法没有触发呢?
Michelle,你好像打错字了。上述虚拟保护方法的签名可以在这里阅读。这个论证和你的变体有一点细微的差别。谁能告诉我为什么传入连接没有触发?
修复方法是修改相应头文件和源文件中的声明和定义,如下所示:
void incomingConnection(quintptr socketDescriptor);
// ^
我建议按如下方式开始使用Q_DECL_OVERRIDE
宏:
void incomingConnection(q**u**intptr socketDescriptor) Q_DECL_OVERRIDE;
这将确保当您的Qt应用程序在c++ 11支持下构建时可以得到编译器错误,当它不支持时,它也会编译得很好,但不会给出错误。它使用c++ 11中引入的"override"上下文说明符。