4

Borland 6 では、これをよく使用して、プログラム アクションのスタックを解除します。

Application->Processmessages();

現在、QT 4.8.1 では、この外国の (私にとって) QT のドキュメントには見つかりませんでした。

誰でも私を助けることができますか?

4

1 に答える 1

4

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 をワーカー スレッドに移動することです。

于 2012-06-25T02:07:25.380 に答える