在按下按钮时使用QTimer暂停Qt中的功能

时间:2013-03-27 16:33:28

标签: c++ qt opengl game-engine qtimer

我正在尝试为我在Qt + OpenGL中开发的游戏实现暂停按钮。

我想使用QTimer实现它。 基本上我每100ms更新一次屏幕。所以为了暂停游戏,我会在按下按钮时停止计时器。当再次按下按钮时,我将再次启动计时器

这是我的pauseOrPlay SLOT:

void Window::pauseOrPlay()
{
  GLWidget::modifyTimer = TRUE;
  GLWidget::isPaused = !GLWidget::isPaused;

  GLWidget  timerUpdater;
  timerUpdater.timerFunc();
}

这是我的timerFunc()

GLvoid GLWidget::timerFunc()
{
  static    QTimer *timer = new QTimer(this);
  connect(timer, SIGNAL(timeout()), this, SLOT(update()));

  if( GLWidget::isPaused)
 timer->start(100);
  else 
 timer->stop();

}

但我没有得到这个功能。我在这个特定的代码上暂停了屏幕,在这里和那里尝试了几个调整时,有时我会快速地进行屏幕更新,这使我指向this,但我无法找到解决问题的方法不知何故

任何帮助或指针?

PS:在这个问题上没有关于OpenGL的内容,但我认为那些可能已经处理类似思考的人,添加了OpenGL标签

1 个答案:

答案 0 :(得分:1)

这种联系处于不利地位。每次暂停或恢复游戏时,都会将其设置为连接。但是如果你多次连接,你的插槽将被称为每个信号发射的多个瓦片。

确保只创建计时器并连接一次。我建议将计时器结构和信号连接移动到你的GLWidget的构造函数中。将指向计时器的指针存储为类的成员变量,以便可以在类的成员函数中启动和停止它。