2017-06-02 95 views
0

我想向JS公开一些C++对象。到目前为止,我已经使用修饰符Q_OBJECTQ_POPERTYQ_INVOKABLE等正确暴露给QML的对象。这部分工作正常。在C++和QML之间共享(Q)WebChannel

当然,在C++方面我创建一个WebChannel,并与一些暴露的对象,如:

QWebChannel *channel = new QWebChannel(); 
channel->registerObject("test", prueba); 

在另一方面,我在那里我使用WebEngineViewWebChannel一个QML文件。我想知道如何连接C++和QML之间的通道。

我见过很多例子,如this,但我不知道如何将它与QML集成。

有什么想法?

+0

看看[这里](https://stackoverflow.com/questions/43867334/how-to-pass-value-from-qml-to-javascript-in-qwebengineview]) – SourabhKus

回答

1

您不应在QML和C++中创建新的(Q)WebChannel。这样,你会得到两个不同的渠道。

如果你想访问QML中的频道,我建议构建一个WebChannel,这实际上是一个QQmlWebChannel并继承QWebChannel

+0

让我们假设我创建'QWebChannel'只能在C++中使用。我如何告诉QML使用该频道?我看到的所有文档和示例对我来说都很模糊。 – tesluka

+0

您可以使用['setContextProperty'](http://doc.qt.io/qt-5/qqmlcontext.html#setContextProperty)将对象传递给qml,但您应该考虑创建'QQmlWebChannel',以便能够访问QML中的所有属性。 – m7913d