在Dialog关闭后运行QTimer

时间:2015-08-25 22:53:01

标签: python qt pyqt4

我有一个 QDialog ,我在其中创建一个 QTimer对象,它会触发每个 n 秒的函数。关闭对话框(按下x按钮)后,计时器仍在触发,似乎没有被破坏。我怎么能阻止它?目前作为一种解决方法,我在输入 closeEvent()时明确地调用 Qtimer.stop()

我希望删除每个类成员,当Window关闭时,即使我明确调用 Deconstructor ,Qtimer对象仍然存在。

else if

1 个答案:

答案 0 :(得分:3)

http://doc.qt.io/qt-5/timers.html

  

计时器功能的主要API是QTimer。那堂课   提供定时器在定时器触发时发出信号的定时器,以及   继承QObject以便它很好地适应于所有权结构   大多数GUI程序。使用它的正常方式是这样的:

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(updateCaption()));
timer->start(1000);
     

QTimer对象制作为此窗口小部件的子对象,以便何时进行   删除此小部件,也删除计时器。接下来是timeout()   信号连接到将完成工作的插槽,它启动   值为1000毫秒,表示它将超时   每一秒。

在C ++中,计时器是窗口小部件或其他QObject的父级,然后它们的生命周期与QObject的生命周期相关联,但是当你停止计时器时仍然是一个好习惯不需要它。当您致电setLayout时,布局会成为父级。计时器不知道它的父节点,因此当小部件被销毁时它不会被销毁。它只是位于堆上,仍然被QApplication事件循环运行。

http://doc.qt.io/qt-5/qobject.html#setParent

因此要么将self传递给QTimer的构造函数,要么调用setParent上的QTimer将其正确设置到对象树中。

http://doc.qt.io/qt-5/objecttrees.html

更新:显然setParent在PyQt中不起作用。只需在self构造函数中传递QTimer

希望有所帮助。