3

いくつかあると言う

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);

だから私はqmlWebViewでdsefinedを次のようなメソッドを持つQtオブジェクトにキャストする方法を疑問に思います->page()か?

4

1 に答える 1

3

コードを確認したところ、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();
于 2012-05-03T05:19:16.490 に答える