C++ 可浇铸QML WebView的目标是什么?

C++ 可浇铸QML WebView的目标是什么?,c++,qt,webkit,qml,C++,Qt,Webkit,Qml,说我们有一些 WebView { id: webView objectName: "webView" ... 我们可以通过以下方式成功地找到它: QObject *object = w.ui->rootObject(); QObject *object_webView = object->findChild<QObject*>("webView"); QObject*object=w.ui->rootObject

说我们有一些

WebView {
           id: webView
           objectName: "webView"
...
我们可以通过以下方式成功地找到它:

  QObject *object = w.ui->rootObject();
    QObject *object_webView = object->findChild<QObject*>("webView");
QObject*object=w.ui->rootObject();
QObject*object_webView=object->findChild(“webView”);
但为什么我们不能将其转换为QWebView,而不是QGraphicsWebView,使用这样的线条:

QGraphicsWebView * view = qobject_cast<QGraphicsWebView *>(object_webView);
QGraphicsWebView*view=qobject\u cast(object\u webView);

因此,我想知道如何将qml WebView中定义的数据强制转换为具有类似
->page()

的方法的某个Qt对象。我检查了代码,发现qml WebView元素实际上是QDeclarativeWebView,它源自QDeclarativeItem

QGraphicsWebView不属于继承层次结构。QGraphicsWebView是QDecrativeWebView的私人成员

要访问QWebPage,我想您必须使用QdeCrativeItem创建自己的自定义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");
    }
};
QDeclarativeWebView::QDeclarativeWebView(QDeclarativeItem*parent):QDeclarativeItem(parent)
{
init();
}
void QDeclarativeWebView::init()
{
d=新的QDecrativeWebViewPrivate(本);
...
d->view=新图形视图(该视图);
d->view->setResizesToContents(真);
QWebPage*wp=新的QDeclarativeWebPage(本页);
设置页面(wp);
...
}
GraphicsWebView::GraphicsWebView(QdeCrativeWebView*父级)
:QGraphicsWebView(父级)
,家长(家长)
,按时间(400)
{
}
类WebKitQmlPlugin:publicqdeclarativeextensionplugin{
Q_对象
公众:
虚拟无效注册表类型(常量字符*uri)
{
Q_断言(QLatin1String(uri)=QLatin1String(“QtWebKit”);
qmlRegisterType();
qmlRegisterType(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();
//自定义QML web视图元素
MyDeclarativeWebView::MyDeclarativeWebView(QDeclarativeItem*parent)
:QDeclarativeItem(父级)
{
mGraphicsWebView=新的QGraphicsWebView(此);
}
QGraphicsWebView*MyDeclarativeWebView::webView()常量{
返回CSWebView;
}
//在main.cpp中注册webview wlement
qmlRegisterType(“MyWebView”,1,0,“MyWebView”);
//使用旧代码访问自定义webview元素
QObject*object=w.ui->rootObject();
QObject*myWebViewObj=object->findChild(“webView”);
MyDeclarativeWebView*myWebView=QoObject_cast(myWebViewObj);
QGraphicsWebView*graphivsWebview=myWebView->webView();

以及如何创建这样的对象,使其可以从外部qml而不是作为主ui元素使用?此链接应该有助于将QWidget派生的对象放入qml,我很愚蠢((我不知道如何将此或甚至[此]()你能再解释一下吗?你想把QGrimeCuffBVIEW放到QML上,也想加入qWebPad吗?我建议创建自定义QDeclarativeItem,你可以简单地制作QGrimICSwitbVIEW,QQualestIVE项的子,然后你可以把它暴露给QML,并且从C++代码中你可以把对象投射到你的自定义类,并访问WebVIEW和网页。code>您希望将QGraphicsWebView置于QML,并希望访问QWebPage-是。。