2015-06-09 57 views
0

我正在使用Qt 5.4并尝试从我的QTcpSocket发出“已断开”信号时恢复接受新连接。所以我写的h和.cpp文件分别如下:使用QPointer和QObject ::与C++连接11

QPointer<QTcpServer> tcpServer; // in .h file 

connect(tcpSocket, &QAbstractSocket::disconnected, [=](){ 
     tcpServer->resumeAccepting(); // in .cpp file 
    }); 

正如你所看到的,我用QPointertcpSocket。使用上面的代码,我无法构建我的程序并收到“没有匹配的函数调用...”错误,而在没有QPointer的情况下定义tcpSocket时没有任何问题。

我应该如何解决这个问题?

回答

2

做直接连接会更聪明。

connect(tcpSocket, &QAbstractSocket::disconnected, 
     tcpServer, &QTcpServer::resumeAccepting); 

请注意,nextPendingConnection已家长设置为QTcpServer,所以你也可以通过访问服务器:

auto tcpServer = qobject_cast<QTcpServer *>(sender()->parent()); 
+1

亲爱@Marker R,连接以这种方式需要的TCPSocket和TCPSERVER既要简单的指针不是Qpointer。所以在这种情况下它不起作用。 – Reza

+0

@thung感谢您的评论。这个对我有用。首先请将它写为对其他人的回答。第二个qt官方帮助说:“一个守护指针,QPointer ,就像一个普通的C++指针T *,除了当被引用的对象被销毁时被自动设置为0(不同于普通的C++指针,它变成了”悬挂指针“在这种情况下)。“,我有很多信号/插槽连接没有使用QPointer ::数据为他们,他们工作正常(至少我认为: - |)。那么我是否应该纠正它们? – Reza

+0

@Reza你确定你没有使用旧的连接语法的工作连接?例如'connect(object,SIGNAL(objectSignal()),object,SLOT(objectSlot()));' – thuga