如何删除QTimer

时间:2019-04-22 10:17:06

标签: c++ qt

尽管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++;
}

2 个答案:

答案 0 :(得分:1)

尽管QObject具有父对象,但它们会自动删除,但是只有在删除父对象时,才会删除它们。在您的情况下,您正在制作新的QTimers并让它们成为自重挂在其父对象上,这实际上是内存泄漏,并且找不到一个偷偷摸摸的内存泄漏检查工具,因为该对象仍被它们引用父母当您不再使用QObject时,应该删除它们,但是如果您在某些插槽或回调中确实使用了QObject :: deleteLater()。

尽管在这种情况下,正如有人已经说过的那样,请不要使用QTimer对象,而应使用单次计时器或QBasicTimer。

答案 1 :(得分:0)

使用QTimer :: singleShot(100,this,SLOT(next_frame()));代替。