QwebKit使用心得Word格式.docx

上传人:b****1 文档编号:13562126 上传时间:2022-10-11 格式:DOCX 页数:6 大小:16.70KB
下载 相关 举报
QwebKit使用心得Word格式.docx_第1页
第1页 / 共6页
QwebKit使用心得Word格式.docx_第2页
第2页 / 共6页
QwebKit使用心得Word格式.docx_第3页
第3页 / 共6页
QwebKit使用心得Word格式.docx_第4页
第4页 / 共6页
QwebKit使用心得Word格式.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

QwebKit使用心得Word格式.docx

《QwebKit使用心得Word格式.docx》由会员分享,可在线阅读,更多相关《QwebKit使用心得Word格式.docx(6页珍藏版)》请在冰豆网上搜索。

QwebKit使用心得Word格式.docx

接下来,将阐述如何实现Qt和网页互相调用。

首先,在“图1”所示的主界面中生成WebKit控件,可以自己new或者在Design中拖入。

在本例中,采取的是拖入此控件。

此控件对应的类是QWebView。

它可以Load和显示页面。

通过此控件我们来调用网页的方法和接受网页的调用。

本主界面的类是

#include&

lt;

QtGui/QDialog&

gt;

#include"

ui_qwebkittest.h"

mywebkit.h"

classQWebKitTest:

publicQDialog

{

Q_OBJECTpublic:

QWebKitTest(QWidget*parent=0,Qt:

:

WFlagsflags=0);

~QWebKitTest();

voidsetValueFromWeb(constQString&

amp;

strName,constQString&

strPwd);

protectedslots:

voidonBtnCallJSClicked();

voidpopulateJavaScriptWindowObject();

private:

Ui:

QWebKitTestClassui;

MyWebKitm_webObj;

};

而WebKit控件则是

classUi_QWebKitTestClass

public:

QWebView*webView;

主界面通过下面的形式调用。

ui.webView

接下来我们将用ui.webView来见证奇迹诞生的时刻。

首先我们先来弄清楚第一个问题,怎么将Qt和网页联系起来,使之能够互相调用?

估计这是大部分看官最关心的吧。

嗯,好吧。

广告时间到

各位看官也来看看这个帖子吧,Qt的Signal和Slot机制

(一),给鄙人攒点人气,谢了

Qt使用的是向网页注册一个QObject对象,通过这个对象,网页可以通过这个调用这个对象的方法来实现调用底层的逻辑。

以下是本例中的注册对象的声明,

classMyWebKit:

publicQObject

MyWebKit(QObject*parent);

~MyWebKit();

publicslots:

voidonCall(QStringstrName,QStringstrPwd);

而Qt则通过,调用下列方法把注册对象注入到网页中,

ui.webView-&

page()-&

mainFrame()-&

addToJavaScriptWindowObject(QString("

mywebkit"

),&

m_webObj);

注册过程如下,

ui.webView-&

setUrl((QUrl("

qrc:

/form.html"

));

看官注意,m_webObj就是注入到网页中的QObject对象,而"

是此对象在网页中的名字。

在网页中,“mywebkit"

就代表着m_webObj,被当作一个javascript对像来调用。

具体细节请看下列网页代码,

&

html&

head&

title&

Loginpage&

/title&

scriptlanguage="

javascript"

functioncalltoqt()

{

varnameArray;

nameArray=document.getElementsByName("

username"

);

varpwdArray;

pwdArray=document.getElementsByName("

userpwd"

window.mywebkit.onCall(nameArray[0].value,pwdArray[0].value);

}functioncallfromqt(name,pwd)

nameArray[0].value=name;

pwdArray[0].value=pwd;

}

/script&

/head&

body&

palign="

center"

&

Name:

inputtype="

text"

name="

/&

/p&

Password:

button"

value="

onclick="

calltoqt()"

/body&

/html&

在此网页中,当用户点击图1中的左边网页的Submit按钮时,就会调用calltoqt的javascript方法。

在calltoqt中,我们获取了username和userpwd的值后,就调用window.mywebkit.onCall的方法,来通知底层Qt模块,这里的mywebkit就是我们刚注册的m_webObj,OnCall就是MyWebKit类的成员函数。

当网页调用这个函数时,Qt模块的MyWebKit:

OnCall函数就会被调用。

代码如下:

voidMyWebKit:

onCall(QStringstrName,QStringstrPwd)

QWebKitTest*pMain=(QWebKitTest*)parent();

pMain-&

setValueFromWeb(strName,strPwd);

在此函数中,MyWebKit会调用主界面(QWebKitTest)的setValueFromWeb方法,将网页中的Name和Password栏的内容放到右边的Name和Password控件中显示出来。

代码如下,

voidQWebKitTest:

setValueFromWeb(constQString&

strPwd)

ui.textEdit_name-&

setText(strName);

ui.textEdit_pwd-&

setText(strPwd);

但是不是所注册对象的成员函数都可以被调用呢?

答案是否定的,只有Slot函数才能被网页调用,其他的则不能。

因为这是一个signal-slot过程。

Qt是如何调用网页的呢?

我们来看以下的例子。

当用户在右边的Name和Password控件填入内容后,点击"

按钮,Qt就调用evaluateJavaScript函数来改变网页的行为。

具体代码如下,

voidQWebKitTest:

onBtnCallJSClicked()

QStringstrVal=QString("

callfromqt(\"

%1\"

\"

%2\"

"

).arg(ui.textEdit_name-&

toPlainText()).arg(ui.textEdit_pwd-&

toPlainText());

evaluateJavaScript(strVal);

我们可以看到evaluateJavaScript的参数,实际上就是一段javascript代码(callfromqt("

andrei"

"

12345"

)。

Qt底层模块通过evaluateJavaScript调用了网页中的"

callfromqt"

方法

functioncallfromqt(name,pwd)

使右边的Name和Password控件中的值,赋到了左边网页中Name和Password的输入框中。

当然,evaluateJavaScript的参数不一定只是javascript方法,同样一段javascript代码也是可以的。

比如以上功能也可以这样调用

evaluateJavaScript("

nameArray=document.getElementsByName(\"

username\"

pwdArray=document.getElementsByName(\"

userpwd\"

nameArray[0].value=\"

andrei\"

;

pwdArray[0].value=\"

123456\"

);

但这就是QWebKit的全部真相吗?

请听下回分解

注明:

此文章本人在CSDN上同步发布。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1