開發環境Fedora, 使用Qt.4.7.2版本
如題, 今天找了好久終於發現是QPushButton中的
-
virtual void setEnabled ( bool )
在作祟
{前情題要}
為了設計需要, 我在一頁UI中, 某一個Button按下後, 會連接一個SLOT的function, 去做很多處理
首先在建構子中設connect:
connect(myButton, SIGNAL(clicked()), this, SLOT(myFunc()));
而在處理中, 會有大約幾秒鐘的時間呈現忙碌狀態,
在那段myFunc()處理中, 我不希望有使用者去按畫面中的任何一個按鈕, 以免發生不可預期的事情
所以我在myFunc()中添加了以下程式碼:
void myWidget::myFunc()
{
myButton->setEnabled(false);
...所有按鈕也都設為setEnabled(false)..
/*處理的程式碼開始(開始忙碌狀態)*/
..........
..........
/*處理完畢*/
myButton->setEnabled(true);
...所有按鈕也都設回setEnabled(true)..
}
這樣是有問題的
紅色的部分最好不要這樣用
根據觀察, 這個myFunc()並未正常結束
{不負責任的結論}
不可在那個Button的clicked所連結執行的SLOT函式中又把那個Button設為setEnabled(false)
尤其如果是使用stackedWidget可能會大有問題(也就是造成當機..= =|||)
奇怪的是
如果在myFunc()處理完, 把UI 給hide, 再show的話, 重新進那個有myButton的頁面就不會當機
(難道QT重畫會有影響嗎@@..?)
但如果使用stackedWidget, 在myFunc()處理完畢後跳入別的page, 再直接切換(沒有經過hide,show) 回有myBotton按鈕的那一頁page
就會使得有myBotton按鈕的那一頁page顯示不出來並且造成當機
(等等..這個好像比較奇怪XD)
留言列表