qt.webChannelTransport 在 QWebEngineView 中未定义

qt.webChannelTransport undefined in QWebEngineView

我 运行 使用 QWebChannel 从 JavaScript 访问对象时遇到问题。我目前正在使用 Qt5.4.2.

这是我的 CPP 代码:

myObject::myObject(QWidget *parent)
: QMainWindow(parent)
{

    QWebEngineView* m_pView = new QWebEngineView(this);

    QWebChannel channel;
    channel.registerObject(QString("myObject"), this);

    m_pView->load(QUrl("file:///D:/index.html"));

    setCentralWidget(m_pView);

}

在我的 index.html 中,我包括 qwebchannel.js :

<script type="text/javascript" src="qrc:///qtwebchannel/qwebchannel.js"></script>

在我的 javascript 文件中,我正尝试像这样检索我的对象:

new QWebChannel(qt.webChannelTransport, function(channel) {

var myObject = channel.objects.myObject;

});

但是,我在控制台中收到以下错误:

Error: qt is not defined

我也尝试用 navigator.qtWebChannelTransport 替换它,但我得到了:

Error: transport is not defined

有人能告诉我我做错了什么吗?谢谢。

Edit : qt.webChannelTransport 只能通过 Qt5.5 访问吗?当我阅读 QWebEnginePage::setWebChannel...

的文档时似乎就是这种情况

没错。

QWebChannelQWebEngine 的集成仅在版本 5.5 中可用,正如该模块的主要开发人员 Milian here 所述。

对于有同样问题但使用 Qt 5.5+ 的其他人,请确保您的 .pro 文件中有 QT += webchannel

加载前必须设置WebChannel url

您必须 google qwebchannel.js 才能获取默认代码(实际上有很多代码)或以某种方式从 Qt 的目录中获取默认代码。我把我的放在 <qrc>/qtwebchannel/qwebchannel.js 下。然后确保将其作为常规 javascript 导入到 index.html 中,但源为“qrc:/qtwebchannel/qwebchannel.js”。我今天早些时候遇到了你的确切错误,我做了一些修复 - 可能包括那个脚本。