您的位置:首页 > 编程语言 > Qt开发

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

2016-04-09 10:32 561 查看
QtWebkit 模块使得Qt widget能够通过HTML的object标签嵌入到web页面中,并通过JavaScript代码进行访问,而Qt对象也能相应的访问web页面元素。

 

将Qt对象插入到web页面中

首先继承并实现QWebPluginFactory类 :



[cpp] view plain copy

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

[php] view plain copy

<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代码中加载并显示 该页面:


[cpp] view
plain copy


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对象:



[php] view
plain copy


<a href="javascript:document.getElementById("myLabel").setText("通过JavaScript访问Qt对象");" mce_href="javascript:document.getElementById("myLabel").setText("通过JavaScript访问Qt对象");">点击访问Qt对象</a>  


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

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

[cpp] view plain copy

// myPlugin指向的对象可在HTML中用名字myPluginObject进行访问  

webView->page()->mainFrame()->addToJavaScriptWindowObject("myPluginObject", myPlugin);  

// 当信号signalEmitted被触发时,调用JavaScript的functionToCall函数  

webView->page()->mainFrame()->evaluateJavaScript("myPluginObject.signalEmitted.connect(functionToCall);");  

FROM: http://blog.csdn.net/zhu_xz/article/details/5072596
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: