<object>从javascript到Qt c++(在这篇文章中的例子)

Use of <object> from javascript to Qt c++ ( example in this post )

本文关键字:文章 c++ object javascript Qt      更新时间:2023-09-26

我正在阅读一本关于Qt的书,有一个例子,我不明白,我们在哪里使用html页面:我不明白如何从html页面的所有<object>被c++"分析":我在看BrowserWindow类,逻辑似乎发生了:new BrowserWindow(url, new WebPage);,但我没有找到任何东西……

下面是代码:首先,我们有一个html页面与几个<object>:
<object type="application/x-qt-plugin" classid="QLineEdit"
    id="nameEdit" height="30">Can't load QLineEdit plugin!</object>
<p>
<object type="application/x-qt-plugin" classid="MatrixWidget"
    id="leftMatrix" width="124" height="94" readonly="1">
Can't load MatrixWidget plugin!</object>

然后我们有一个网页类,应该分析html: createPlugin响应类型"application/x-qt-plugin":

QObject* WebPage::createPlugin(const QString &classId,
        const QUrl&, const QStringList &parameterNames,
        const QStringList &parameterValues)
{
    QWidget *widget = 0;
    if (classId == "MatrixWidget") {
        widget = new MatrixWidget(view());
        int index = parameterNames.indexOf("readonly");
        if (index > -1)
            static_cast<MatrixWidget*>(widget)->setReadOnly(
                   static_cast<bool>(parameterValues[index].toInt()));
    }
    else { ...

main.cpp为:

QString url = QUrl::fromLocalFile(AQP::applicationPathOf() +
                                      "/matrixquiz.html").toString();
    BrowserWindow *browser = new BrowserWindow(url, new WebPage);

browserWindow类的构造函数是:

BrowserWindow::BrowserWindow(const QString &url, QWebPage *webPage,
                             QWidget *parent, Qt::WindowFlags flags)
    : QFrame(parent, flags)
{
    setFrameStyle(QFrame::Box|QFrame::Raised);
    webView = new QWebView;
    if (webPage)
        webView->setPage(webPage);
    load(url);
    createActions();
    createToolBar();
    createLayout();
    createConnections();
}

所以,我的问题是:我们如何检查html文件中的所有<object> ?

谢谢你的帮助

当QtWebKit解析网页时,如果它发现一个带有type="application/x-qt-plugin"属性的<object>标签,它将调用QWebPage::createPlugin函数来尝试创建插件。

您不必显式检查对象标记,QtWebKit为您完成这一切并将其转换为createPlugin调用。