Qt 关于定时器实用的总结
文章目录Qt 关于定时器实用的总结第一种方案:startTimer + QTimerEvent第二种方案:QTimer类+信号和槽定时器与线程Qt 关于定时器实用的总结在实际编程中常常会使用到定时器,现在就将定时器的用法作个总结。第一种方案:startTimer + QTimerEvent对于一个QObject的子类,只需要使用int QObject::startTimer(int interva
·
Qt 关于定时器实用的总结
在实际编程中常常会使用到定时器,现在就将定时器的用法作个总结。
第一种方案:startTimer + QTimerEvent
对于一个QObject的子类,只需要使用
int QObject::startTimer(int interval) 函数来开启一个定时器。当定时器溢出时可以在timerEvent() 函数中进行相关操作。
例如:
// 开启一个1秒定时器,返回其ID 代表该定时器
id1 = startTimer(1000); //1000毫秒为一秒
id2 = startTimer(2000);
id3 = startTimer(3000);
//溢出处理函数
void Widget::timerEvent(QTimerEvent *event)
{
// 判断是哪个定时器,在调试窗口输出相应的语句。
if(event->timerId() == id1){
qDebug() << "timer1";
}
else if(event->timerId() == id2){
qDebug() << "timer2";
}
else{
qDebug() << "timer3";
}
}
第二种方案:QTimer类+信号和槽
使用QTimer类来构造一个定时器,然后信号和槽关联溢出事件。
例如:
在构造函数中添加:
// 创建一个新的定时器
QTimer *timer = new QTimer(this);
// 关联定时器的溢出信号到我们的槽函数上
connect(timer,SIGNAL(timeout()),this,SLOT(timerUpdate()));
// 设置溢出时间为1秒,并启动定时器
timer->start(1000);
槽函数里实现相关操作:
// 定时器溢出处理
void Widget::timerUpdate()
{
// 实现相关操作
//.....
}
定时器与线程
编写QT程序时,时常会需要使用定时器QTimer来执行一些定时任务,但当定时任务执行的时间过长,则会影响整个界面的响应,因此会想到使用另一个工作线程来执行定时器,一般情况下可以选择从QThread派生一个线程类。
例如:
在窗口类头文件加入:
QThread* pWThread;
QTimer* pWTimer ;
1、构造定时器线程:
/* ---------------构造一个定时器线程------------------------------*/
pWThread= new QThread(this);
pWTimer = new QTimer();
pWTimer->start(200);
pWTimer->moveToThread(pWThread);
connect(pWTimer,SIGNAL(timeout()),this,SLOT(on_TimeoutSlot()),Qt::QueuedConnection);
connect(pWThread, SIGNAL(finished()), pWThread, SLOT(deleteLater()));
connect(this, SIGNAL(stop()), pWTimer, SLOT(stop()));
pWThread->start();
2、
void Test::on_TimeoutSlot()
{
// 实现相关操作
//.....
}
3、析构函数加入:
emit stop();
pWThread->quit();
pWThread->wait();
delete pWTimer ;
delete pWThread;
更多推荐



所有评论(0)