0

QT4から始めていますが、アプリケーションコードをどこに置くのか疑問に思っています。
ここ?

void MainWindow::changeEvent(QEvent *e) {...}

それともここ?(正確にはどこで?)

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

アプリがユーザーイベントに反応するだけでなく、ループで定期的に実行されるようにしたい場合、ループはどこに配置しますか?

4

2 に答える 2

2

Qtには独自のメインループがあり、QTimerクラスを使用してQtに接続できます。

独自のイベントループを提供する場合は、QApplication :: processEvents()を使用して、Qtにイベントを処理するように(そして責任あるUIを維持するように)通知できます。

また、QAbstractEventDispatcherが役立つ場合があります。

この質問も役立つかもしれません。

于 2010-06-18T20:55:34.797 に答える
2

非GUIスレッド内でループしない限り、(暗黙のメインGUIスレッドで)ループすることによってGUIをブロックします。ここにいくつかの異なるアプローチがあります:

  1. スレッドを使用します。Qtの信号とスロットはスレッドセーフです。したがって、スレッド内でエミュレーター(ブロックする可能性があります)を呼び出すことができ、エミュレーターは呼び出し元のスレッドにデータを返します。次に、GUIスレッドにシグナルを送信します。このスレッドは、シグナルに応答し、それに応じてGUIを更新します。
  2. タイマーを使用します。ゼロミリ秒の遅延に設定されたQTimer(またはsingleShotタイマー)を使用できます。これは、ループをブロックせずに、できるだけ頻繁にスロットを呼び出す効果があります。スロットがすぐに戻る場合、これはGUIをブロックしているようには見えず、プログラミングを少し簡素化します。

processEvents()を使用するなど、他にもさまざまなアプローチがありますが、個人的にはスレッドアプローチをお勧めします。

于 2010-06-18T20:56:52.270 に答える