从 C++ 访问 QML WebView

Posted

技术标签:

【中文标题】从 C++ 访问 QML WebView【英文标题】:Access QML WebView from C++ 【发布时间】:2014-01-15 09:41:30 【问题描述】:

我有一个 qml 文件,里面有一个 webview。 我在 C++ 中获得了对该对象的引用,但它是 QObject* 我可以将它转换为类似于 QWebView 的东西,我可以从中获取 QWebPage 对象等等吗? 如果我尝试 QWebView,qobject_cast 返回 NULL。 它适用于对 QQuickItem 的强制转换,但这对我帮助不大。

谢谢

【问题讨论】:

【参考方案1】:

你不能。 QML WebView 元素没有公共 C++ API。您有两种方法可以解决此问题:

    使用私有 API。首先,将其添加到 .pro 文件中:
QT += quick quick-private webkit-private

然后包含私有标头:

#include <private/qquickwebview_p.h>

现在您可以访问 WebView,只要您获得指向它的指针(例如,通过使用 QObject::findChildren 或将 QObject* 从 QML 传递到 C++。这里我只是假设 WebView 是根对象,为简单起见):

QQuickWebView * webView = dynamic_cast<QQuickWebView*>(viewer.rootObject());
qDebug() << webView->url();
    使用通用的QObject API 来访问 WebView 的属性:
QObject * webView = viewer.rootObject();
qDebug() << webView->property("url");

【讨论】:

对于 WebEngineView webengine webengine-private webenginecore webenginecore-private 我添加了这些来工作

以上是关于从 C++ 访问 QML WebView的主要内容,如果未能解决你的问题,请参考以下文章

从 QML 访问 C++ 函数

从 C++ 访问 QML WebView

如何从 C++ 访问 QML ListView 委托项目?

在没有 Q_PROPERTY 定义的情况下从 C++ 访问 QML 对象的属性

如何从 C++ 代码将 QML 对象转换为 QQuickWindow?

如何从 QML 访问嵌套的 QStandardItemModel 的项目?