我检查了代码,发现 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();