Qt开发-记一个QWebView访问谷歌的崩溃问题
程序员文章站
2024-01-20 21:25:28
...
打开Qt自带的浏览器例子browser,输入 https://*.com/questions/25850803/qwebview-always-fails-to-load-website 结果程序直接崩溃。
google一天无果,曾经想过更换到webengine,但是由于项目是跨平台,如果更换到msvc,工作量太多,并且也不一定有QWebView稳定。
QWebView访问网页做了很多工作,比如https://*.com/questions/25850803/qwebview-always-fails-to-load-website会获取网页的html,js等文件,所以会执行多次get操作,在其中访问某一个网页时出现错误,导致崩溃。
于是只能自己查找崩溃原因,下面列出步骤(当你的webview访问网页有问题时可以参考)
1、检查ssl文件是否在程序当前目录(debug版本直接放在Qt安装目录下的Qt5Network.dll的同级目录) ,即ssleay32.dll以及libeay32.dll文件
2、检查你是否对QWebSettings进行过设置(即webview->settings()->setAttribute,一般为默认)
3、分析访问结果,webview->page->networkAccessManager() 获取到QNetworkAccessManager通过他的finished信号获取错误码以及链接
connect(this->page()->networkAccessManager(),SIGNAL(finished(QNetworkReply*)),this,SLOT(slt_finished(QNetworkReply*)));
void slt_finished(QNetworkReply * reply){
if(reply){
qDebug()<<"#######"<<reply->error()<<reply->url()<<"#######";
}
}
通过输出得到是在访问https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js,发生了QNetworkReply::UnknownNetworkError的错误,在google之后发现这是一个网络代理的问题,但是我使用火狐访问是没有问题的,所以只能是Qt浏览器没有使用网络代理的问题,于是找到了这个函数
m_pNetWorkAccessManager->proxyFactory()->setUseSystemConfiguration(true);//使用系统配置
问题解决,不过还是要记得在浏览器发生QNetworkReply::UnknownNetworkError错误时,终止访问,并且弹出错误提示。
上一篇: Android拦截并获取WebView内部POST请求参数
下一篇: JQ实现网页验证码