2016-04-01 23 views
1

我寫過一個使用QTcpServer等的小型Web服務器......它工作正常,所以我想進一步實現Qt的WebSocket功能。我希望WebSocket-Server可以在與我的Web服務器相同的端口上訪問(由於客戶端網絡的限制)。在/admin/socket所以我需要一種方法來一個與QTcpSocket(從請求處理程序訪問的/admin/socket「升級」到QWebSocket來自QTcpSocket的QWebSocket

我的WebSocket,服務器應該可以訪問。 QWebSocket在this構造函數中具有此功能,在QWebSocketServerPrivate中使用this升級方法,但它全部是私有的,只能在QWebSocketServer內部使用。

有沒有辦法實現我上面描述的?我必須實現自己的WebSocket處理程序嗎?

回答

2

您需要將Qt源文件中的必要文​​件複製到您的項目中,將QWebSocket包裝到命名空間中,以免它與Qt自己產生衝突,並使構造函數非私有。這是實現這一目標的唯一方法,無需編寫大量自己的代碼,也不需要調用未定義的行爲。

要使用您的類型,請通過using使其可見;它會隱藏Qt的::QObject然後:

#include <QtCore> 

namespace Foo { class QObject {}; } 

int main() { 
    using Foo::QObject; 

    //   ours vvvvvvv  Qt's vvvvvvv 
    Q_ASSERT(sizeof(QObject) < sizeof(::QObject)); 
} 

Qt提供了一個理由源代碼:你應該當它是有道理的使用它!