2015-06-09 38 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

相關問題