close

開發環境Fedora, 使用Qt.4.7.2版本

如題, 今天找了好久終於發現是QPushButton中的

在作祟
 

{前情題要} 
為了設計需要, 我在一頁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) 

arrow
arrow
    全站熱搜

    lynn770707 發表在 痞客邦 留言(0) 人氣()