приостановить функциональность в Qt используя QTimer при нажатии кнопки

Я пытаюсь реализовать кнопку паузы для игры, которую я разрабатываю в Qt + OpenGL.

Я хочу реализовать это с помощью QTimer.
В основном я обновляю экран на 100 мс. Поэтому для того, чтобы приостановить игру, я остановлю таймер при нажатии кнопки. и когда кнопка снова нажата, я снова запустит таймер

Вот мой слот pauseOrPlay:

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

}

Но я не получаю функциональность. Я получаю паузу на этом конкретном коде и после нескольких попыток твики здесь и там, иногда я получаю обновление экрана очень быстро, который указал мне на этот но я не смог как-то найти решение своей проблемы

Любая помощь или указатели?

PS: В этом вопросе ничего нет об OpenGL, но я думаю, что это те люди, которые могли бы иметь дело с подобным, подумав, добавив тег OpenGL

1

Решение

Эта связь в плохом месте. Он настроен на подключение каждый раз, когда вы останавливаетесь или возобновляете игру. Но если вы подключаетесь несколько раз, ваш слот будет называться несколькими тайлами для каждого излучения сигнала.

Убедитесь, что вы только создаете таймер и подключаетесь к нему один раз. Я предлагаю перенести конструкцию таймера и сигнальное соединение в конструктор вашего GLWidget. Сохраните указатель на таймер как переменную-член вашего класса, чтобы вы могли запускать и останавливать его в функциях-членах класса.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]