0

次のようなメインを使用したい:

int main()
{
   if (param)
      QtDisp *disp = new QtDisp(); //no visual result
   else
      SDLDisp *disp = new SDLDisp();

   disp->init(param); //displays the window
 
   while (1)
   {
      disp->change_color(colour); //change background colour
      sleep(1);
   }
}

QtDisp を作成する必要があります。

ブロックしている exec() をどうするかわかりません。最初は Qthread を使おうと思ったのですが、表示は最初のスレッドでなければなりません。

4

1 に答える 1

0

Qt はイベント ベースの駆動型フレームワークです。すべての GUI パーツは、イベント ループがないと機能しません。別のスレッドでのブルート計算を除いて、ほとんどすべてがイベントループで実行される必要があります。exec() メソッドは、そのイベント システムを開始します。したがって、exec() を呼び出すまでは、何か役に立つことはできません。最も簡単な方法では、次のようにできます。

int delay = 10; //msec
QTimer *colorChangeTimer() = new QTimer();
colorChangeTimer->setSingleshot(false);
connect(colorChageTimer, SIGNAL(timeout()), disp, SLOT(onTimerChageColor()));
colorChageTimer->start(delay);
int result = QApplication::exec();
delete colorChangeTimer;
return result;
于 2013-03-20T07:56:38.043 に答える