QWebChannel Class

向远程 HTML 客户端公开 QObjects。更多

Header: #include <QWebChannel>
qmake: QT += webchannel
Inherits: QObject

属性

公共功能

QWebChannel(QObject *parent = nullptr)
virtual ~QWebChannel()
QBindable<bool> bindableBlockUpdates()
QBindable<int> bindablePropertyUpdateInterval()
bool blockUpdates() const
void deregisterObject(QObject *object)
int propertyUpdateInterval() const
void registerObject(const QString &id, QObject *object)
void registerObjects(const QHash<QString, QObject *> &objects)
QHash<QString, QObject *> registeredObjects() const
void setBlockUpdates(bool block)
void setPropertyUpdateInterval(int ms)

公共插槽

void connectTo(QWebChannelAbstractTransport *transport)
void disconnectFrom(QWebChannelAbstractTransport *transport)

信号

void blockUpdatesChanged(bool block)

详细说明

QWebChannel 填补了 C++ 应用程序与 HTML/JavaScript 应用程序之间的空白。通过将QObject 派生对象发布到 QWebChannel,并在 HTML 端使用qwebchannel.js,就可以透明地访问QObject 的属性、公共槽和方法。无需手动传递消息和序列化数据,C++ 端的属性更新和信号发射会自动传输到可能远程运行的 HTML 客户端。在客户端,将为任何已发布的 C++QObject 创建 JavaScript 对象。它反映了 C++ 对象的 API,因此使用起来很直观。

QWebChannel 透明地支持QFuture 。当客户端调用一个返回QFuture 的方法时,QWebChannel 会在QFuture 结束后才发送一个包含QFuture 结果的响应。

通过使用QMetaType::registerConverter() 定义从QJsonValue 到 JSON 的转换器,可支持从 JSON 到 JSON 的自定义类型转换。请注意,如果QJsonValue 与预期格式不匹配,从QJsonValue 到具体类型的自定义转换器必须失败。否则,QWebChannel 将无法使用默认的转换机制。JavaScript 端也有自定义转换器。

C++ QWebChannel API 可以与任何 HTML 客户端对话,这些客户端可以在本地甚至远程机器上运行。唯一的限制是,HTML 客户端必须支持qwebchannel.js 使用的 JavaScript 功能。因此,我们基本上可以与任何现代 HTML 浏览器或独立 JavaScript 运行时(如 node.js)进行交互。

此外,还有一个声明式WebChannel API

另请参阅 Qt WebChannel 单机示例JavaScript APIQMetaType::registerConverter()。

属性文档

[bindable] blockUpdates : bool

注意: 该属性支持QProperty 绑定。

当设置为true 时,更新将被阻止,远程客户端将不会收到有关属性更改的通知。

将此属性设置为false 后,一旦更新再次解锁,这些更改就会被记录并发送到客户端。默认情况下,更新不会被阻止。

[bindable] propertyUpdateInterval : int

注意: 该属性支持QProperty 绑定。

该属性包含属性更新间隔。

可以通过将该间隔设置为正值,将其改为不同的间隔(以毫秒为单位)。属性更新会在间隔到期后批量发送。如果设置为零,在单次事件循环运行中发生的更新将被批处理,并在下一次运行时发送。如果为负值,更新将立即发送。默认值为 50 毫秒。

成员函数文档

[explicit] QWebChannel::QWebChannel(QObject *parent = nullptr)

用给定的parent 构建 QWebChannel 对象。

请注意,只有将 QWebChannel 连接到QWebChannelAbstractTransport 后,它才能完全正常运行。HTML 客户端也需要使用 qwebchannel.js.

[virtual noexcept] QWebChannel::~QWebChannel()

摧毁QWebChannel.

[slot] void QWebChannel::connectTo(QWebChannelAbstractTransport *transport)

QWebChannel 连接到给定的transport 对象。

然后,传输对象将处理 C++ 应用程序与远程 HTML 客户端之间的通信。

另请参阅 QWebChannelAbstractTransportQWebChannel::disconnectFrom()。

[invokable] void QWebChannel::deregisterObject(QObject *object)

将给定的objectQWebChannel 中注销。

远程客户端将收到给定对象的destroyed 信号。

注: 可通过元对象系统和 QML 调用此函数。请参见Q_INVOKABLE

另请参阅 QWebChannel::registerObjects()、QWebChannel::registerObject() 和QWebChannel::registeredObjects()。

[slot] void QWebChannel::disconnectFrom(QWebChannelAbstractTransport *transport)

断开QWebChanneltransport 对象的连接。

另请参阅 QWebChannel::connectTo().

[invokable] void QWebChannel::registerObject(const QString &id, QObject *object)

QWebChannel 注册一个对象。

object 的属性、信号和公共方法会发布到远程客户端。然后,一个标识符为id 的对象就会在客户端生成。

BINDABLE 但没有NOTIFY 信号的属性将在客户端进行属性更新,但没有为变更通知注册回调机制。

注: 目前的一个限制是,必须在任何客户端初始化之前注册对象。

注: 可通过元对象系统和 QML 调用该函数。参见Q_INVOKABLE

另请参阅 QWebChannel::registerObjects()、QWebChannel::deregisterObject() 和QWebChannel::registeredObjects()。

void QWebChannel::registerObjects(const QHash<QString, QObject *> &objects)

将一组对象注册到QWebChannel

对象的属性、信号和公共可调用方法将发布给远程客户端。然后,在objects 地图中构建一个带有作为键的标识符的对象。

注: 目前的一个限制是,必须在初始化任何客户端之前注册对象。

另请参见 QWebChannel::registerObject()、QWebChannel::deregisterObject() 和QWebChannel::registeredObjects()。

QHash<QString, QObject *> QWebChannel::registeredObjects() const

返回向远程客户端发布的已注册对象的映射。

另请参阅 QWebChannel::registerObjects()、QWebChannel::registerObject() 和QWebChannel::deregisterObject()。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.