2013-11-28 63 views
0

我正在開發一個有意義的應用程序,我周圍實施的QTcpSocket包裹我的類(因爲它是一個TCP協議,我需要能夠使用原始套接字和添加的功能作爲儘可能無差別)。Qt5 QTcpSocket派生類和QTcpServer

所以,爲了簡單起見,我的代碼的結構是這樣的:

class MyTCPSocket : public QTcpSocket 
{ 
Q_OBJECT 
// .... 
} 

class MyTCPServer : public QTcpServer 
{ 
Q_OBJECT 
// .... 
} 

而且隨着QTcpServer既可,默認nextPendingConnection()函數返回的與QTcpSocket一個實例,我不能投達MyTCPSocket(據我所知,QTcpSocket沒有複製結構)。

我最好的選擇是什麼?我在想我可以創建一個新的MyTCPSocket,並簡單地將套接字描述符設置爲MyTCPServer的nextPendingConnection()返回的套接字描述符,但我不確定在舊套接字被刪除時這是如何工作的。

有沒有更好的方法來處理這種情況?

回答

1

確切地說:覆蓋incomingConnection但不要調用基類,而是創建一個QTcpSocket子類的實例並使用setSocketDescriptor就可以了。如果你想保持QTcpSocket「信號行爲」,也可以撥打addPendingConnection併發出newConnection

然後只需將您從nextPendingConnection獲得的套接字下載到您的QTcpSocket子類。