天天看點

qt關于程式崩潰

qt程式崩潰最常見的應該是記憶體溢出,這是程式設計習慣造成的,

比如:用Qlist的時候,沒有檢查Qlist.size()的大小,直接就.at()了,這樣就造成程式崩潰。

還有就是指針為NULL,結果做為參數或者直接操作使用。也會造成程式崩潰。

是以任何函數,隻要帶有參數。一定要對參數進行判斷,特别是指針或者引用。

接下來介紹一種奇葩的程式崩潰現象。

第一步,我們在ui界面上添加一個按鈕Qpushbutton,和一個QlineEdit,

第二步,在按鈕的槽函數中寫如下代碼;

void Widget::on_pushButton_clicked()
{
    for (int i = 0; i < 10; i++)
    {
        ui->lineEdit->setText (i);
    }
}      

然後我們運作程式,我們可以看到界面上隻會顯示9這個數字;

接着:我們改一下代碼:

void Widget::on_pushButton_clicked()
{
    for (int i = 0; i < 10; i++)
    {
        ui->lineEdit->setText (i);
        QThread::msleep (1);
    }
}      

我們添加一個延時1秒,我們運作後看到的是,9秒後顯示的數字是9,之前都沒有顯示任何數字;

而且會發生一件事情就是,如果你點選其他按鈕,或者空白區域會造成程式崩潰;

為什麼會造成崩潰,我想不用說大家也清楚吧,因為按鈕的點選槽函數還沒有執行完成,又點選了其他事件。因為程式是單線程,還在for循環中運作,是以崩潰掉了,

繼續閱讀