我有一个 QDialog ,我在其中创建一个 QTimer对象,它会触发每个 n 秒的函数。关闭对话框(按下x按钮)后,计时器仍在触发,似乎没有被破坏。我怎么能阻止它?目前作为一种解决方法,我在输入 closeEvent()时明确地调用 Qtimer.stop()?
我希望删除每个类成员,当Window关闭时,即使我明确调用 Deconstructor ,Qtimer对象仍然存在。
else if
答案 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
。
希望有所帮助。