required
Header | #include
|
---|---|
qmake: | QT += webchannel |
Since: | Qt 5.4 |
Inherits: | QObject |
简介
QWebChannel 类的作用是向远端Html客户端暴露 QObject。
QWebChannel 填补了c++应用程序和 HTML/JavaScript 应用程序之间的空白。通过将QObject派生对象发布到QWebChannel并在html中引入qwebchannel.js脚本可从此处获取。在HTML端,可以透明地访问QObject的属性、公共槽和方法。不需要手动消息传递和数据序列化,c++方面的属性更新和信号发射将自动传输到可能远程运行的HTML客户机。在客户端,将为任何发布的c++ QObject创建JavaScript对象。它反映了c++对象的API,因此可以直观地使用。
成员函数
QWebChannel(QObject *parent = Q_NULLPTR) | |
---|---|
virtual | ~QWebChannel() |
bool | blockUpdates() const |
void | deregisterObject(QObject *object) |
void | registerObject(const QString &id, QObject *object) |
void | registerObjects(const QHash<QString, QObject *> &objects) |
QHash<QString, QObject *> | registeredObjects() const |
void | setBlockUpdates(bool block) |
- registerObject 函数可以向 html 中注册 QObject 对象,可以指定对象 ID。
- deregisterObject 函数解除注册。
- blockUpdates 函数 和 setBlockUpdates 分别用来 获取和 设置 对象更新的阻塞标志。当设置为true时,更新将被阻塞,远程客户端将不会收到有关属性更改的通知。
更新将被记录下来,通过将此属性设置为false解除阻塞将记录发送到客户机。默认情况下,更新不会被阻止。
槽函数
void | connectTo(QWebChannelAbstractTransport *transport) |
---|---|
virtual | disconnectFrom(QWebChannelAbstractTransport *transport) |
- connectTo 函数连接 QWebChannel到指定的 transport 对象。然后 transport 对象将负责C++ App 与 远端Html客户端之间的通信。
- disconnectFrom 函数 QWebChannel 与 transport 对象的连接。
使用实例
c++ 代码
connect(ui->editor, &QPlainTextEdit::textChanged, [this]() {
m_content.setText(ui->editor->toPlainText());
});
QWebChannel *channel = new QWebChannel(this);
channel->registerObject(QStringLiteral("content"), &m_content);
PreviewPage *page = new PreviewPage(this);
page->setWebChannel(channel);
ui->preview->setPage(page);
ui->preview->setUrl(QUrl("qrc:/index.html"));
html 端
<!doctype html>
<html lang="en">
<meta charset="utf-8">
<head>
<link rel="stylesheet" type="text/css" href="3rdparty/markdown.css">
<script src="3rdparty/marked.min.js"></script>
<script src="qwebchannel.js"></script>
</head>
<body>
<div id="placeholder"></div>
<script>
'use strict';
var placeholder = document.getElementById('placeholder');
var updateText = function(text) {
placeholder.innerHTML = marked(text);
}
new QWebChannel(qt.webChannelTransport,
function(channel) {
var content = channel.objects.content;
updateText(content.text);
content.textChanged.connect(updateText);
}
);
</script>
</body>
</html>
更多实例见 qt example webchannel 部分