2012-03-23 68 views
0

我對Qt和GUI編程比較陌生,而且我很難過。從另一個類中更新QProgressBar

我想更新QProgressBar的進度,以便進度反映出課堂上採取的行動。這個類是做了很多業務,我希望能夠與這些操作的進度更新QProgressBar

class Worker 
{ 
... 
public: 
    void do_many_operations() 
    { 
    ... 
    quint64 total_operations = ...; 
    for (...) 
    { 
     /* do some operations */ 
     ... 
     /* update the progress bar */ 
    } 
    } 
} 

,我已經被困在的部分是如何,在最佳的OO方式儘可能更新QProgressBar

我想過可能是讓我WorkerQObjectemit更新必要的時候,還是要通過的QProgressBar對象爲Worker類的do_many_operations()

任何有識之士將不勝感激。

編輯:更新,以反映我的意思QProgressBarQStatusBar

回答

0

大部分部件不作出任何更改,直到Qt可以處理事件。 您應該能夠調用常規的QStatusBar插槽方法,然後調用應用程序的processEvents方法。

void do_many_operations() 
{ 
    /* Startup status bar */ 
    myStatusBar.showMessage("Beginning many operations."); 
    QApplication::instance().processEvents(); 

    quint64 total_operations = ...; 
    for (...) 
    { 
    /* do some operations */ 

    /* update the status bar (probably want a more dynamic message... */ 
    myStatusBar.showMessage("Doing work still"); 
    QApplication::instance().processEvents(); 
    } 

    /* clear the status bar, no need to processEvents. */ 
    myStatusBar.clearMessage(); 
} 
+0

對不起,我的意思是一個QProgressBar,而不是狀態欄。我更新了我的帖子。雖然我如何訪問表單上的ProgressBar? – nerozehl 2012-03-23 03:37:05

0

直接讓setValue(int)會做,或​​者如果你有一些信號,它們與setValue(int)連接。

當然,你必須在setMaximum()之前。

+0

好的,但我遇到的問題是ProgressBar是MainWindow的成員,而Worker類在MainWindow的方法內實例化。我應該將ProgressBar傳遞給do_many_operations()函數嗎? – nerozehl 2012-03-23 03:48:48

+0

當然你需要指針。 – Topro 2012-03-23 03:57:31