2016-04-01 10 views
1

QTcpServer, vb kullanarak küçük bir web sunucusu yazdım ... Biraz çalışıyor ve Qt's WebSocket işlevselliğini uygulamak istedim. WebSocket-Server'ın web sunucumla aynı bağlantı noktasında erişilebilir olmasını istiyorum (istemciler ağındaki sınırlamalar nedeniyle). /admin/socket yüzden QWebSocket bir QTcpSocket (/admin/socket talebi işleyicisi erişilebilir) 'yükseltme' için bir yol gerekir azQWcSocket dan QTcpSocket

Benim WebSocket-Sunucu erişilebilir olmalıdır. QWebSocket, QWebSocketServerPrivate uygulamasında this yükseltme yöntemiyle kullanılan this yapıcısında bu özelliğe sahiptir, ancak tamamı özeldir ve yalnızca QWebSocketServer tarafından dahili olarak kullanılır.

Yukarıda tarif ettiğim şeyi başarmanın bir yolu var mı? Kendi WebSocket işleyicimi uygulamak zorunda mıyım?

cevap

2

Gerekli dosyaları Qt kaynaklarından projenize kopyalamanız, QWebSocket ürününü bir ad alanına kaydırmanız gerekir, böylece Q'ın kendi ile çakışmayacak ve kurucuyu özel yapmamalısınız. Bu, kendi kodunuzu çok yazmadan ve tanımlanmamış davranışları çağırmadan bunu başarmanın tek yoludur.

Yazınızı kullanmak için, using aracılığıyla görünür hale getirin; daha sonra Qt en ::QObject gizler:

#include <QtCore> 

namespace Foo { class QObject {}; } 

int main() { 
    using Foo::QObject; 

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

Qt bir nedeni kaynak kodu ile birlikte gelir: Uygun durumlarda kullanmak gerekiyordu!