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);
   }
}

它适用于 SDLDisp,现在我必须创建 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 回答