メイン GUI にある進行状況バーの更新をトリガーするループ (いくつかの計算を行う) から信号を発信しました。遅延があり、プログレスバーが100%のままで、マウスがビジーに変わることがあります.数秒後にプログレスバーが非表示になり(遅延が終了したことを示します)、そのループの後に何もないため、何もできませんこの遅れを作ることができると考えています。
- ループ計算が軽い場合 (つまり、多くの計算を実行する必要がない場合)、そのような遅延は発生しないことに注意してください。
エミットシグナルはロジックレイヤーのクラス内にあります。<QtGui/QApplication>
そのクラスに含めることで何かを試しました(これはロジックレイヤーであるため、QtGuiライブラリが必要な理由ですが、私には正しいことではないように思えますが、私は' m は何かをテストするだけです)、次のコードqApp->processEvents();
をループ内に配置すると、スムーズに実行され、マウスがビジー状態になることはありませんが、まだ遅延があります (この遅延が発生している間に GUI で反応できる唯一の違いですが、この遅延が終了するまで結果は更新されません)。
でのテストのため、processEvents()
スレッドに関連するものだと思っていましたが、もしそうなら、どうすれば遅延動作を修正できますか?
サンプルコード:
ロジック層クラス:
#include <QtGui/QApplication>
...
processMethod(...)
{
Loop(...)
{
qApp->processEvents();
emit processBarSignle(value);
...some calculations...
}
emit processBarSignle(100);
}
レイヤーを表示 (MainWindow):
on_btn_nextProcess_clicked()
{
m_ui->pBar_process->setVisible(true);
LogicClass->processMethod(...);
m_ui->pBar_process->setVisible(false);
}
ありがとう