什么是可铸造的QML WebView
To what is castable QML WebView to?
假设我们有一些
WebView {
id: webView
objectName: "webView"
...
我们成功可以找到它:
QObject *object = w.ui->rootObject();
QObject *object_webView = object->findChild<QObject*>("webView");
但是为什么我们不能把它投射到QWebView,而不是QGraphicsWebView,像这样一行:
QGraphicsWebView * view = qobject_cast<QGraphicsWebView *>(object_webView);
所以我想知道如何将 qml WebView 中的 dsefineed 转换为具有类似 ->page()
方法的一些 Qt 对象?
我检查了代码,发现QML Webview元素实际上是QDeclarativeWebView,它派生自QDeclarativeItem。
QGraphicsWebView不进入固有层次结构。QGraphicsWebView是QDeclarativeWebView的私人成员。
为了让您能够访问QWebPage,我想您必须使用QDeclarativeItem创建自己的自定义WebView元素。
遵循代码应该有助于澄清问题。
QDeclarativeWebView::QDeclarativeWebView(QDeclarativeItem *parent) : QDeclarativeItem(parent)
{
init();
}
void QDeclarativeWebView::init()
{
d = new QDeclarativeWebViewPrivate(this);
...
d->view = new GraphicsWebView(this);
d->view->setResizesToContents(true);
QWebPage* wp = new QDeclarativeWebPage(this);
setPage(wp);
...
}
GraphicsWebView::GraphicsWebView(QDeclarativeWebView* parent)
: QGraphicsWebView(parent)
, parent(parent)
, pressTime(400)
{
}
class WebKitQmlPlugin : public QDeclarativeExtensionPlugin {
Q_OBJECT
public:
virtual void registerTypes(const char* uri)
{
Q_ASSERT(QLatin1String(uri) == QLatin1String("QtWebKit"));
qmlRegisterType<QDeclarativeWebSettings>();
qmlRegisterType<QDeclarativeWebView>(uri, 1, 0, "WebView");
}
};
通过使用以下代码,您可以创建自定义 QML Web 视图元素并访问网页。
//custom QML web view element
MyDeclarativeWebView::MyDeclarativeWebView(QDeclarativeItem *parent)
: QDeclarativeItem(parent)
{
mGraphicsWebView = new QGraphicsWebView(this);
}
QGraphicsWebView* MyDeclarativeWebView::webView() const {
return mGraphicsWebView;
}
//register webview wlement in main.cpp
qmlRegisterType<QmlLabel>("MyWebView", 1, 0, "MyWebView");
//use your old code to access custom webview element
QObject *object = w.ui->rootObject();
QObject *myWebViewObj = object->findChild<QObject*>("webView");
MyDeclarativeWebView * myWebView = qobject_cast<MyDeclarativeWebView *>(myWebViewObj);
QGraphicsWebView* graphivsWebview = myWebView->webView();
相关文章:
- 从C++实例化QML
- 使用CMake创建QML插件
- QT通过C++添加映射QML项目
- 如何在没有信号的情况下从C++执行QML插槽
- QML按钮点击功能执行顺序
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 建议在运行时将带有类实例的列表从c++导入qml
- Qt Quick-如何仅从c++代码与qml属性交互
- 如何将带有自定义对象的容器从C++传递到QML
- QML 使用带有参数C++函数
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 如何从C++端挂接到 QML 项的 onClick 事件
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 从 QML 中清除 WebView 缓存
- Access QML WebView from C++
- 什么是可铸造的QML WebView
- QML:如何创建半透明/半透明的WebView元素
- QML WebView 组件尚未准备就绪
- 如何重置QML WebView
- webView QML中的身份验证