尽管QTimer继承了QObject,而我们不需要手动删除它,是否可以将它放入多次调用的方法中?
void MainWindow::paintEvent(QPaintEvent *event) {
//create a timer to update every frame
QTimer* timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(next_frame()));
timer->start();
QPainter painter(this);
render(painter, counter);
//if the game is not paused, increase the counter
if (isPlaying) counter++;
}
答案 0 :(得分:1)
尽管QObject具有父对象,但它们会自动删除,但是只有在删除父对象时,才会删除它们。在您的情况下,您正在制作新的QTimers并让它们成为自重挂在其父对象上,这实际上是内存泄漏,并且找不到一个偷偷摸摸的内存泄漏检查工具,因为该对象仍被它们引用父母当您不再使用QObject时,应该删除它们,但是如果您在某些插槽或回调中确实使用了QObject :: deleteLater()。
尽管在这种情况下,正如有人已经说过的那样,请不要使用QTimer对象,而应使用单次计时器或QBasicTimer。
答案 1 :(得分:0)
使用QTimer :: singleShot(100,this,SLOT(next_frame()));代替。