2012-02-02 48 views
1
void MyClass::onButtonClicked(){ 
    QPushButton *button = static_cast<QPushButton*>(sender()); 
    button->setDisabled(true); 
    performSomeHeavyFunctionFor5or10seconds(); 
} 

我希望我的按鈕在該功能之前進行了視覺更新(現在它已更新)。我應該在這裏使用單獨的線程?第二個問題是我的程序在執行函數時凍結。Qt。在執行重功能之前更新元素的外觀

回答

1

我看到兩種可能性在這裏:

  1. 在自己的線程
  2. 呼叫QApplication::processEvents(QEventLoop::ExcludeUserInputEvents)執行繁重的工作,你才能處理重繪等。您可以通過這樣省略標誌執行繁重的工作之前,但我會離開它,所以兩個快速點擊後,彼此不能導致隨機行爲
+0

感謝#2。它有一個有趣的功能)該按鈕被禁用(灰色文本),但它仍然推(邊界)!我會考慮一下,但在我看來,單獨的線程就是解決方案。 – Eddie 2012-02-02 11:54:15

+0

如果它仍然被推動,請在調用processEvents()之前嘗試按鈕 - >更新()或重繪或類似的東西() – 2012-02-02 13:02:18

+0

由於它沒有獲取名爲「鼠標按鈕釋放」的用戶輸入事件,因此它仍然被推入;)。在這種情況下,setDisabled將在按鈕 – 2012-02-02 13:44:58

相關問題