清单 13. createPlugin 函数的实现
class QMyWebPage : public QWebPage { protected: QObject *createPlugin ( const QString &classid, const QUrl &url, const QStringList ¶mNames, const QStringList ¶mValues ); ... ... }; QObject* QMyWebPage::createPlugin ( const QString &classid, const QUrl &url, const QStringList ¶mNames, const QStringList ¶mValues ) { if ( classid == "VideoPlayer" ) { // 在这里创建一个自定义的带视频播放功能的窗体, VideoWindow* window = new VideoWindow(); // 配置参数如 width=800 等,会在参数 paramNames 和 paramValues 中传过来 window->setGeometry( ........ ) ; window->setSourceFile( ...... ) ; return window; // 返回创建的窗体 } ... } |
与截取 request 的方法一样,我们要让自己 QMyWebPage 被使用:
QWebView* Webview = new QWebView ( this ); QMyWebPage* page = new QMyWebPage (); Webview->setPage ( page ); // 让 WebView 使用我们的 QMyWebPage |
注意加载页面之前要打开插件使能的选项,方法如下:
QWebSettings* setting = Webview->settings (); setting->setAttribute ( QWebSettings:luginsEnabled, true ); |
至此,我们创建了自己的网页元素:类型为 VideoPlayer 的 object。网页可以像使用标准网页元素一样,灵活的使用嵌入式平台自己特有的功能。当然,不一定非要把这个网页元素用 application/x-qt-plugin 或者是 application/x-qt-styled-widget 来定义,Qt 也支持 type 不是这两者或者以动态链接库的方式来使用插件,这样就可以支持类似 FLASH 之类非 Qt 自定义的 object,关于这方面更多信息可以参考 Qt 的文档。 |