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析构)
}
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析构)
}
相关文章推荐
- Qt多次链接connect函数的信号槽会调用多次问题
- ListView设置滑动到底部自动加载 重复多次加载问题
- 解决Qt中某类的槽无法连接另一类的信号的问题
- jqGrid多次表头排序会累加排序条件问题
- 【Scikit-Learn 中文文档】分解成分中的信号(矩阵分解问题) - 无监督学习 - 用户指南 | ApacheCN
- 关于ionic指令 <ion-infinite-scroll ng-if="moreDataCanBeLoaded()" icon="ion-loading-c" on-infinite="loadMoreData()" distance=1%> </ion-infinite-scroll> 运用中遇到的问题
- 图像检索服务器编写问题记录——加入信号安装后的问题
- 多线程使用notify和wait进行线程间通信丢失信号的问题
- 2440 GPIO模拟信号输出问题
- 提示29. 怎样避免延迟加载或Load()阅读器问题
- Mac下SecureCRT不能Ctrl+C发送中断信号的问题
- Linux3.6.7中Make uImage的load address 和 Entry Point相同的问题
- 报错No mapping found for HTTP request with URI、实现蒙纱,弹出对话框利用load 、编码问题、 jQ的data绑定数据等等遇到的问题
- socket中的SIGPIPE信号问题
- 如何解决 Undefined offset: 3 in user_node_load() 问题
- iPhone开发过程中调试多次Release问题 message sent to deallocated
- 通过load值查服务器问题
- RCP中使用IWorkspaceRunnable解决IResourceChangeListener监听触发多次问题
- 解决load 函数无法赋予变量名的问题
- 有感于微课数据同步多次 也与云上的不一致问题,大家的思路不清楚是主要原因。