3
在Borland公司6我經常用這個來脫膠程序操作:現在QT中的應用程序 - > Processmessages?
Application->Processmessages();
,與QT 4.8.1,我沒有QT的這個外國(對我來說)文檔中找到。
任何人都可以幫助我嗎?
在Borland公司6我經常用這個來脫膠程序操作:現在QT中的應用程序 - > Processmessages?
Application->Processmessages();
,與QT 4.8.1,我沒有QT的這個外國(對我來說)文檔中找到。
任何人都可以幫助我嗎?
在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的工作線程。
同樣的建議也適用於Borland 6代碼。任何代碼塊UI線程超過幾(毫)秒更應該被重寫到使用異步隊列或工作線程。 –