首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QLocalServer不会启动传入连接

QLocalServer不会启动传入连接
EN

Stack Overflow用户
提问于 2014-03-14 01:14:39
回答 1查看 602关注 0票数 3

我正在Qt中创建一个简单的QSocketServer。套接字开始侦听,但incomingConnection方法似乎从未运行过。有人能解释一下这是怎么回事吗?

主要:

代码语言:javascript
复制
m_pipeserver = new PipeServer(this);  
if (m_pipeserver->listen("test.sock")) { 
    qDebug() << "STARTED";
}

pipeserver.h

代码语言:javascript
复制
class PipeServer : public QLocalServer
{
    Q_OBJECT
public:
    PipeServer(Controller *parent = 0);
protected:
    void incomingConnection(qintptr socketDescriptor);

pipeserver.cpp

代码语言:javascript
复制
PipeServer::PipeServer(Controller *parent) 
{
}
void PipeServer::incomingConnection(qintptr socketDescriptor)
{
    qDebug() << "NEW CONNECTION";
    // etc...

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

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

有人能告诉我为什么incomingConnection不开火吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-14 06:25:31

有人能告诉我为什么incomingConnection不开火吗?

米歇尔,看来你做错了。上述虚拟保护方法的签名可以读取在这里。在这个论点和你的变体之间有一个细微的区别。

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

代码语言:javascript
复制
void incomingConnection(quintptr socketDescriptor);
//                       ^

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

代码语言:javascript
复制
void incomingConnection(q**u**intptr socketDescriptor) Q_DECL_OVERRIDE;

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22394278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档