Qt ui控制元件程式碼先後順序的tips
阿新 • • 發佈:2019-01-23
MyMainWindow::MyMainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MyMainWindow) { manger = new QNetworkAccessManager(this); connect(manger, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *))); manger->get(QNetworkRequest(QUrl("http://blog.csdn.net/lankin2013/article/details/41855013"))); //manger1 = new QNetworkAccessManager(this); ui->setupUi(this); ui->progressBar->hide(); }
這是一段很普通的程式碼,是我嘗試Qt的http下載程式碼中遇到的一個小問題,其實以前也遇到過,不過後來不以為意就忽略掉了。現在就記錄下來,以防以後犯錯。
錯誤:我最開始把ui->setupUi(this)和ui->progressBar->hide()這兩句話寫的時候換了個位置,然後程式異常了。
解決方法:全部註釋逐句檢查,以為是其他地方寫錯了。後來看到因為這句出了問題,想了一下,意識到了問題。
Qt下的異常結束有幾種情況(寫專案總結的):(1)新增三方庫時只添加了靜態庫,而程式執行時缺少動態庫,所以手動將dll檔案新增程序序目錄
(2)變數未初始化或在使用前就已經析構掉了,換句話說就是訪問你無權訪問的空間,linux下常稱為段錯誤。
迴歸到這個問題,思考ui->setupUi(this)的作用,可以點開這個檔案,看到QProgressBar*progressBar;progressBar=new QProgressBar(centralWidget);也就是你在progressBar這個變數還不存在時就去設定它的屬性,當然會引起異常。
Tips:ui下的控制元件設定其屬性時請務必寫在ui->setupUi(this)之後