Qt开发-记一个QWebView访问谷歌的崩溃问题

打开Qt自带的浏览器例子browser,输入 https://stackoverflow.com/questions/25850803/qwebview-always-fails-to-load-website 结果程序直接崩溃。


google一天无果,曾经想过更换到webengine,但是由于项目是跨平台,如果更换到msvc,工作量太多,并且也不一定有QWebView稳定。


QWebView访问网页做了很多工作,比如https://stackoverflow.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错误时,终止访问,并且弹出错误提示。


展开阅读全文

没有更多推荐了,返回首页