从 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");
【讨论】:
对于 WebEngineViewwebengine webengine-private webenginecore webenginecore-private
我添加了这些来工作以上是关于从 C++ 访问 QML WebView的主要内容,如果未能解决你的问题,请参考以下文章
在没有 Q_PROPERTY 定义的情况下从 C++ 访问 QML 对象的属性