定时器是用来处理周期性事件的一种对象,类似于硬件定时器。例如设置一个定时器的定时周期为 1000 毫秒,那么每 1000 毫秒就会发射定时器的 timeout() 信号,在信号关联的槽函数里就可以做相应的处理。
Qt 中的定时器类是 QTimer。QTimer 不是一个可见的界面组件,在 UI 设计器的组件面板里找不到它。定时器的主要类的QTimer 类,其主要的属性是 interval,是定时中断的周期,单位毫秒。QTimer 主要的信号是 timeout(),在定时中断时发射此信号,要想在定时中断里做出响应,这就需要编写 timeout() 信号的槽函数。下面是窗口类中增加的定义(省略了其他不相关的定义):
#include <QTimer>
class MainWindow : public QMainWindow { private slots: void MyTimeout () ; //定时溢出处理槽函数 private: QTimer *fTimer; //定时器 };
然后新建定时器,建议在你程序初始化的时候新建,避免多次新建定时器类和多次链接信号槽。
fTimer=new QTimer(this); //新建定时器类 /*把定时器与信号槽链接,注意不要多次调用,你每调用一次就会多创建一次信号槽链接,例如调用了两次,当第一个信号槽链接停止时,第二个定时器信号槽链接还会继续运行,就需要再停止一次定时器*/ connect(fTimer,SIGNAL(timeout()),this,SLOT(MyTimeout()));
接着在你需要启动定时器的位置调用启动函数启动。
fTimer->stop(); //启动前停止定时器,避免前面有未关闭的定时器 fTimer->start (10) ; //设置定时周期,单位:毫秒
然后编写你的定时器的信号槽代码,这里的代码是定时器定时时间到了的时候就会执行的代码。
void MainWindow::MyTimeout() {//定时器中断响应 }
最后在你需要关闭定时器的位置,调用关闭函数,关闭定时器。
fTimer->stop(); //关闭定时器