В вашем конструкторе VisualizationDlg
у вас есть ...
this->rePaintTimer = startTimer(1);
Это приведет к отправке QTimerEvent
в ваш экземпляр VisualizationDlg
раз в миллисекунду (потенциально).
Теперь рассмотрим код, который обрабатывает события таймера ...
void VisualizationDlg::timerEvent (QTimerEvent *event)
{
if(event->timerId() == this->rePaintTimer) {
this->data->update(ui->GInput->value(), ui->updateSpdInput->value());
this->visualizationGL->repaint();
this->rePaintTimer = startTimer(1);
}
}
При первом вызове этого идентификатора, связанного с событием таймера, будет совпадать rePaintTimer
. Следовательно, repaint
будет называться. Но затем вы запускаете новый таймер и присваиваете его идентификатор rePaintTimer
без остановки исходного таймера. Теперь у вас есть два таймера, каждый из которых генерирует события с частотой 1 кГц, но ваш обработчик событий воздействует только на события из самого последнего созданного таймера.
Теперь подумайте, чем это станет через несколько секунд. У вас могут быть тысячи таймеров, каждый из которых генерирует события с частотой 1 кГц.
Удалите строку ...
this->rePaintTimer = startTimer(1);
из обработчика событий, чтобы сделать его ...
void VisualizationDlg::timerEvent (QTimerEvent *event)
{
if(event->timerId() == this->rePaintTimer) {
this->data->update(ui->GInput->value(), ui->updateSpdInput->value());
this->visualizationGL->repaint();
}
}