コードを確認したところ、QMLWebview要素は実際にはQDeclarativeItemから派生したQDeclarativeWebViewであることがわかりました。
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ビュー要素を作成し、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();