Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2123974
  • 博文数量: 229
  • 博客积分: 7217
  • 博客等级: 上校
  • 技术积分: 3224
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-19 17:23
个人简介

个人主页https://xugaoxiang.com,微信公众号: Dev_Club 或者搜索 程序员Club

文章分类

全部博文(229)

文章存档

2017年(1)

2016年(20)

2015年(23)

2013年(1)

2012年(23)

2011年(68)

2010年(62)

2009年(31)

分类: LINUX

2011-10-18 23:30:46

QtWebKit插件的设计可以分为两种情况,一种是MIME类型是application/x-qt-plugin或者application/x-qt-styled-widget,而另一种却无此限制,可以是任意类型。本文主要介绍第一种,相比于第二种情形也更简单,只需要重新实现QObject* QWebPage::createPlugin(const QString &classid,const QUrl &url,const QStringList & paramNames,const QStringList & paramValues)。

webPlugin.pro
  1. TEMPLATE = app
  2. QT += webkit

  3. HEADERS += myPlugin.h
  4. SOURCES += main.cpp myPlugin.cpp
main.cpp
  1. #include <QApplication>
  2. #include <QtGui>

  3. #include "myPlugin.h"

  4. int main(int argc, char *argv[])
  5. {
  6.    QApplication app(argc, argv);

  7.    MyWebView *webView = new MyWebView;
  8.    webView->load(QUrl("Test.html"));
  9.    webView->show();

  10.    app.exec();
  11. }
myPlugin.h
  1. #ifndef MY_PLUGIN_H
  2. #define MY_PLUGIN_H
  3. #include <QWebPage>
  4. #include <QWebView>

  5. // Derive from QWebPage, because a WebPage handles
  6. // plugin creation
  7. class MyWebPage: public QWebPage
  8. {
  9.    Q_OBJECT
  10.    protected:
  11.       QObject *createPlugin(
  12.          const QString &classid,
  13.          const QUrl &url,
  14.          const QStringList &paramNames,
  15.          const QStringList & paramValues);
  16.    public:
  17.       MyWebPage(QObject *parent = 0);
  18. };

  19. // Derive a new class from QWebView for convenience.
  20. // Otherwise you'd always have to create a QWebView
  21. // and a MyWebPage and assign the MyWebPage object
  22. // to the QWebView. This class does that for you
  23. // automatically.
  24. class MyWebView: public QWebView
  25. {
  26.    Q_OBJECT
  27.    private:
  28.       MyWebPage m_page;
  29.    public:
  30.       MyWebView(QWidget *parent = 0);
  31. };

  32. #endif
myPlugin.cpp
  1. #include <QtCore>
  2. #include <QtGui>

  3. #include "myPlugin.h"

  4. MyWebPage::MyWebPage(QObject *parent):
  5.    QWebPage(parent)
  6. {
  7.    // Enable plugin support
  8.    settings()->setAttribute(QWebSettings::PluginsEnabled, true);
  9. }

  10. QObject *MyWebPage::createPlugin(
  11.    const QString &classid,
  12.    const QUrl &,
  13.    const QStringList &,
  14.    const QStringList &)
  15. {
  16.    QObject *result = 0;
  17.    if(classid == "pushbutton")
  18.        //qDebug()<<"pushbutton";
  19.        result = new QPushButton();
  20.    else if(classid == "lineedit")
  21.        //qDebug()<<"lineedit";
  22.        result = new QLineEdit();
  23.    if(result)
  24.        result->setObjectName(classid);
  25.    return result;
  26. }

  27. MyWebView::MyWebView(QWidget *parent):
  28.    QWebView(parent),
  29.    m_page(this)
  30. {
  31.    setPage(&m_page);
  32. }
Test.html
  1. <html>
  2.    <head>
  3.       <title>QtWebKit Plug-in Test</title>
  4.    </head>
  5.    <body>
  6.       <object type="application/x-qt-plugin" classid="pushbutton" name="mybutton" height=300 width=500></object>
  7.    </body>
  8. </html>
编译运行
qmake 
make
./webPlugin




阅读(2942) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~