Qt QWebKit模块似的Qt Widget能通过Html的object标签嵌入到web页面中

来源:互联网 发布:意识与人工智能的关系 编辑:程序博客网 时间:2024/05/18 20:06

首先 要了解 QWebPluginFactory 类,主要了解这两个方法:

virtual QObject * create ( const QString & mimeType, const QUrl & url, const QStringList & argumentNames, const QStringList & argumentValues ) const = 0
virtual QList<Plugin> plugins () const = 0

首先继承并实现QWebPluginFactory类


首先继承并实现QWebPluginFactory类:class MyPlugin: public QWebPluginFactory  {    Q_OBJECT  public:    MyPlugin(QObject* parent = 0);    // 当QtWebkit模块解析到HTML中的object标签时被调用    virtual QObject* create(const QString& mimeType,                            const QUrl& url,                            const QStringList& argumentNames,                            const QStringList& argumentValues) const;    // 返回该factory支持的plugin   virtual QList<Plugin> plugins() const;  };   MyPlugin::MyPlugin(QObject* parent)    : QWebPluginFactory(parent)  {    // do nothing  }  QObject* MyPlugin::create(const QString& mimeType,                            const QUrl& url,                            const QStringList& argumentNames,                            const QStringList& argumentValues) const  {    QLabel* label = new QLabel(url.toString());    return label;  }   QList MyPlugin::plugins() const  {    QList list;    QWebPluginFactory::Plugin entry;    entry.name = "plugin名";    entry.description = "描述";    list.push_back(entry);    return list;  }然后将其嵌入到HTML页面中:<html>  <head><title>test</title></head>  <body>  <object type="application/zxz-plugin" data="http://blog.csdn.net/zhu_xz" width="200" height="100"  id="myLabel"></object>  </body>  </html>


最后,在Qt代码中加载并显示该页面:

QWebView view;  
view.settings()->setAttribute(QWebSettings::PluginsEnabled, true);  
view.page()->setPluginFactory(new MyPlugin);  
view.load(QUrl("test.html"));  
view.show();