В основном классе MainWidnow определён Qtimer* timer. Внутри одного из методов класса timeout связывается с публичным слотом:
if (!timer)
{
timer = new QTimer(this);
}
connect(timer, SIGNAL(timeout()), this, SLOT(redraw()));
timer->start(2000);
Где redraw():
void MainWindow::redraw()
{
QMessageBox msg;
msg.setText("Called");
msg.exec();
if( !stack.isEmpty() )
{
stack[0]->mark ^= stack[0]->mark || 1;
stack[0]->edge->update();
stack.removeFirst();
}
else
{
timer->stop();
delete timer;
}
}
Где stack - это QList. Если проверить дебаггером, то в условие остановки таймера и его удаления, функция входит вовремя, но при этом единожды срабатывает после остановки. В чём может быть причина? Если после этого снова запустить таймер, то функция вызывается дважды с интервалом меньше секунды, и после остановки вызывается дважды.
P.S.: что слот, что таймер вызываются лишь в одном методе на весь проект, а слот исключительно по таймауту.
deleteLaterРешение - вызвать disconnect, когда в таймере отпадет необходимость.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей