我们都知道浏览器中有一套由Netscape浏览器传承下来的插件接口,包括webkit,firefox都是支持的,但是那个开发起来比较困难,并且是平台相关的,借助于Qt的跨平台的特性,可以方便地为Qt开发出一套跨平台的插件。
QtWebkit中插件可以有两种,一种Mime必须是application/x-qt-plugin或者application/x-qt-styled-widget,而另外一种则无需固定,可以是除了前面的两种以外任意其它Mime类型。
前一种相对来说开发起来比较容易,只需重新实现
QObject * QWebPage::createPlugin ( const QString & classid, const QUrl & url, const QStringList & paramNames, const QStringList ¶mValues )
这个函数即可,这个函数会把HTML文件中的参数都传递进来
下面是一个例子:
class PluginPage : public QWebPage
{
public:
PluginPage(QObject *parent = 0)
: QWebPage(parent) {}
protected:
virtual QObject *createPlugin(const QString &classid, const QUrl &url,
const QStringList ¶mNames,
const QStringList ¶mValues)
{
QObject *result = 0;
if (classid == "pushbutton")
result = new QPushButton();
else if (classid == "lineedit")
result = new QLineEdit();
if (result)
result->setObjectName(classid);
//可以进行一些处理
return result;
}
};
这样下面的网页就可以一个pushbutton了:
<html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>
并且还可以在JavaScript访问到QPushbutton,例如:
document.getElementById('mybutton').text将会返回按钮上的字符串。
另外一种比较麻烦,回在下一篇中讲解。