1

我已经使用 QTcpServer 等编写了一个小型 Web 服务器……它工作得很好,所以我想更进一步并实现 Qt 的 WebSocket 功能。我希望 WebSocket-Server 可以在与我的 Web 服务器相同的端口上访问(由于我的客户端网络的限制)。

我的 WebSocket-Server 应该可以访问,/admin/socket所以我需要一种方法将QTcpSocket (可从 的请求处理程序访问/admin/socket “升级”到QWebSocket。QWebSocket 在构造函数中具有此功能,该功能由 QWebSocketServerPrivate 中的升级方法使用,但它都是私有的,仅由 QWebSocketServer 在内部使用。

有没有办法实现我上面描述的?我必须实现自己的 WebSocket 处理程序吗?

4

1 回答 1

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 附带源代码是有原因的:你应该在有意义的时候使用它!

于 2016-04-01T18:56:45.353 回答