Borland 6 では、これをよく使用して、プログラム アクションのスタックを解除します。
Application->Processmessages();
現在、QT 4.8.1 では、この外国の (私にとって) QT のドキュメントには見つかりませんでした。
誰でも私を助けることができますか?
Borland 6 では、これをよく使用して、プログラム アクションのスタックを解除します。
Application->Processmessages();
現在、QT 4.8.1 では、この外国の (私にとって) QT のドキュメントには見つかりませんでした。
誰でも私を助けることができますか?
Qt では、静的関数を使用しますQApplication::processEvents()
。
残念ながら、あなたの問題は、コードの設計が壊れていることです。processEvents
単純に「動けなくなった」ものを呼び出す必要はありません。すべての GUI コードは、短い時間 (約 1 ミリ秒: ~0.001 秒) の run-to-completion メソッドで構成する必要があります。それよりも時間がかかる場合は、それを小さなセクションに分割し、各セクションの処理後に制御をイベント ループに戻す必要があります。
次に例を示します。
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();
}
}
};
期間ゼロ タイマーは、イベント キューが空になるたびにコードを呼び出す方法の 1 つです。
サードパーティのブロッキング ライブラリ コードを呼び出している場合、唯一の (残念な) 修正方法は、これらの操作を QObject のスロットに配置し、その QObject をワーカー スレッドに移動することです。