1. 程式人生 > >Qt ui控制元件程式碼先後順序的tips

Qt ui控制元件程式碼先後順序的tips

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)之後