您的位置:首页 > 移动开发

QWebView load报多次loadFinished信号问题!

2013-09-17 17:18 183 查看
构造函数中:

webView = new QWebView();

connect(webView,SIGNAL(loadFinished(bool)),this,SLOT(loadOver(bool)));

webView->load(QUrl(url));

槽函数:

PageScan::loadOver(bool tmp)

{

info = "";

qDebug() << "\n======================================="<<tmp<<sender()<<"\n"<< url ;//信号来源 参数

QWebElementCollection list = webView->page()->mainFrame()->findAllElements("table");// 筛选 标签 1

if(list.count() != 0){

_RightLoad = true;

}

for(int i = 0; i < list.count(); i++){

QWebElementCollection sublist = list.at(i).findAll("a");// 筛选 标签 2

for(int j=0; j<sublist.count(); j++){

QWebElement e;

e = sublist.at(j);

info = e.attribute("href", "");//制定 超链接 标签"href"

}

emit pUrlChange(info);//发送获取超链接

}

if(list.count() != 0)

emit pScanEnd();

}

发现有些页面出现load触发最多2次loadFinished信号,

经过更改第筛选标签为"*"并打印个数演调试

qDebug() << "elements count : " << list.count() << endl;

发现网页确实缺触发了2次槽,而第一次触发的槽:

======================================= true QWebView(0x275dbb48)

"http://www.XXXX.XXX"

elements count : 6 //仅有6个元素

"" -- ""

"生活信息搜索结果-XX网" -- ""

"" -- "../template/default/skin/theme/theme1.css" //包含2个href

"" -- "../template/default/skin/search062201.css"

"" -- ""

======>pageOver: PageScan(0x275d8f88) //外部析构显示

而正常触发的槽:

======================================= true QWebView(0x275ec2a0)

"http://www.xxx.xxx"

elements count : 335 //应有335 个元素

"" -- ""

"生活信息搜索结果-xxx网" -- ""

"" -- "../template/default/skin/theme/theme1.css"

"" -- "../template/default/skin/search062201.css"

"" -- ""

"" -- ""

"" -- ""

"" -- ""

"" -- ""

"" -- "http://xxxxxcss/bdsstyle.css?cdnversion=20130704"

"html #hm_t_7528.hm-t-container, html #hm_t_7528.hm-t-c..................

不知道QWebView把什么当成一个页面LOAD完成了 (该页面仅有6个元素,包含2个css,其他为控制) 求网页高手指教

然后QWebView又正常的load完 应该load的页面 再次触发loadFinished,

实在没办法就用了一个bool再槽函数做判断,目的就是: 第一次正常 第2次槽就不处理

筛选标签 还原成原来的 不再用通配符*

在槽函数中 第一个筛选标签加个数判断 改变新增bool成员:

if(!_RightLoad){

info = "";

QWebElementCollection list = webView->page()->mainFrame()->findAllElements("table");

if(list.count() != 0){

_RightLoad = true;

}

//处理部分

.......

if(list.count() != 0)

emit pScanEnd();//发结束信号 (一发就在上层删对象调this析构)

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐