Why do you call QTimer::singleShot (600, this, SLOT(ClosePaint())); inside paintEvent?! This way you will start a new singleShot() every time paintEvent is called! You need to call QTimer::singleShot (600, this, SLOT(ClosePaint())); somewhere else.