用Qt开发Web和本地混合的应用

QtWebkit模块使得Qt widget能够通过HTML的object标签嵌入到web页面中,并通过JavaScript代码进行访问,而Qt对象也能相应的访问web页面元素。
将Qt对象插入到web页面中
首先继承并实现QWebPluginFactory类(C++)

 
    
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 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页面中:

 
    
test

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

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

这里,当QtWebkit模块解析该HTML文件,遇到object标签时,会自动调用QWebPluginFactory::create()函数,并传递以下参数:
mimeType:application/zxz-plugin
url:http://blog.csdn.net/zhu_xz
此外,还可以通过object标签的param子标签传递参数。

在web页面中访问Qt对象

在web页面中可以通过类似于下的JavaScript代码访问Qt对象:

HTML code
 
     
   

在Qt对象中访问web页面元素

在QWebPluginFactory::create()函数中添加以下代码:

C/C++ code
 
    
// myPlugin指向的对象可在HTML中用名字myPluginObject进行访问 webView->page()->mainFrame()->addToJavaScriptWindowObject("myPluginObject", myPlugin); // 当信号signalEmitted被触发时,调用JavaScript的functionToCall函数 webView->page()->mainFrame()->evaluateJavaScript("myPluginObject.signalEmitted.connect(functionToCall);");

你可能感兴趣的:(wxWidgets及QT编程,网络及网页编程)