文档介绍:QwebKit使用心得.
QwebKit使用心得
最近这段时间,正在用QWebkit开发一个Application store的项目。因为需要用到第三方的数据,但后台无法直接去获取,所以需要做一个底层的模块,去获取第三方数据,然后给网页调用,因此我们选取了以WebKit为引擎的QWebkit来开发我们的项目。
在开发中,获得了一些心得体会,写下来供大家参考。为了方便说明,我特意做了一个例子。
(图1)
此例子中,左边显示网页,右边是控件部分。
用户在网页的Name和Password输入框输入内容后,点击"Submit"按钮,则右边的Name和Password框则会出现网页中的内容,这就是网页调用Qt模块。
而用户在右边输入分别输入Name和Password,点击"Call JS"后,输入的信息也会显示在左边的Name和Password栏。这就是Qt调用网页。
由此我们可以看出QWebKit,即可以Qt调用网页,也可以网页调用Qt。这样我们就可以做用Qt做一些网页做不了的事情。
接下来,将阐述如何实现Qt和网页互相调用。
首先,在“图1”所示的主界面中生成WebKit控件,可以自己new或者在Design中拖入。在本例中,采取的是拖入此控件。此控件对应的类是QWebView。它可以Load和显示页面。通过此控件我们来调用网页的方法和接受网页的调用。
本主界面的类是
#include <QtGui/QDialog>
#include ""
#include ""class QWebKitTest : public QDialog
{
Q_OBJECTpublic:
QWebKitTest(QWidget *parent = 0, Qt::WFlags flags = 0);
~QWebKitTest(); void setValueFromWeb(const QString &strName,const QString &strPwd);protected slots:
void onBtnCallJSClicked();
void populateJavaScriptWindowObject();private:
Ui::QWebKitTestClass ui;
MyWebKit m_webObj;
};
而WebKit控件则是
class Ui_QWebKitTestClass
{
public:
QWebView *webView;
主界面通过下面的形式调用。
。
首先我们先来弄清楚第一个问题,怎么将Qt和网页联系起来,使之能够互相调用?
估计这是大部分看官最关心的吧。嗯,好吧。
广告时间到
各位看官也来看看这个帖子吧,Qt的Signal和Slot机制(一),给鄙人攒点人气,谢了
Qt使用的是向网页注册一个QObject对象,通过这个对象,网页可以通过这个调用这个对象的方法来实现调用底层的逻辑。
以下是本例中的注册对象的声明,
class MyWebKit : public QObject
{
Q_OBJECTpublic:
MyWebKit(QObject *parent);
~MyWebKit();public slots: void onCall(QString strName,QString strPwd);
private:
};
而Qt则通过,调用下列方法把注册对象注入到网页中,
->page()->mainFrame()->
addToJavaScriptWindowObject(QString("mywebkit"),&m_webObj);
注册过程如下,
->setUrl((QUrl("qrc:/"));
->page()->mainFrame()->addToJavaScriptWindowObject(QString("mywebkit"),&m_webObj);
看官注意,m_webObj就是注入