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錯誤時,終止訪問,並且彈出錯誤提示。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章