2012-06-24 77 views
3

在Borland公司6我經常用這個來脫膠程序操作:現在QT中的應用程序 - > Processmessages?

Application->Processmessages(); 

,與QT 4.8.1,我沒有QT的這個外國(對我來說)文檔中找到。

任何人都可以幫助我嗎?

回答

4

在Qt中,您將使用靜態函數QApplication::processEvents()

唉,你的問題是你的代碼的設計被打破。你永遠不需要打電話processEvents只是爲了「脫鉤」的東西。您的所有GUI代碼應包括這需要很短的時間運行到完成方式(單毫秒的量級上:〜0.001S)。如果某些事情需要更長時間,則必須將它分成更小的部分,並在處理每個部分後將控制權返回到事件循環。

下面是一個例子:

class Worker: public QObject 
{ 
    Q_OBJECT 
    int longWorkCounter; 
    QTimer workTimer; 
public: 
    Worker() : ... longWorkCounter(0) ... { 
    connect(workTimer, SIGNAL(timeout()), SLOT(longWork()); 
    } 
public slots: 
    void startLongWork() { 
    if (! longWorkCounter) { 
     workTimer.start(0); 
    } 
    } 
private slots: 
    void longWork() { 
    if (longWorkCounter++ < longWorkCount) { 
     // do a piece of work 
    } else { 
     longWorkCounter = 0; 
     workTimer.stop(); 
    } 
    } 
}; 

零期間計時器是讓你的代碼,每次叫的一種方式的事件隊列爲空。

如果你調用第三方堵庫代碼,那麼唯一的(不幸)的解決辦法是把這些操作成一個QObject插槽,並移動到QObject的工作線程。

+0

同樣的建議也適用於Borland 6代碼。任何代碼塊UI線程超過幾(毫)秒更應該被重寫到使用異步隊列或工作線程。 –