QtQTimer的使⽤及⽰例
在QT5中,我们有⼀个专门的计时器类,QTimer,我们可以利⽤它完成⼀些关于定时的操作,实例如下:
#include<QTimer>
QTimer* timer =new QTimer();
timer->start(value);//以毫秒为单位
QObject::connect(timer,&QTimer::timeout,receiver,&slot);//时间结束,发送timeout信号
void slot()
{
timer->stop();//停⽌计时器
//do something
}
在我们定时时间结束的时候,我们需要⼿动停⽌timer,不然他会不断发送出timeout这个信号,同时,我们需要注意,在做连接函数之前,我们需要存在这个timer的实例,不然会导致程序崩溃,当然我们也可以不需要实例化timer,⽽是使⽤QTimer的静态⽅法,直接起动定时,⼀下是QT⽂档中的⼀个例⼦:
#include<QApplication>
#include<QTimer>
int main(int argc,char*argv[])
{
QApplication app(argc, argv);
QTimer::singleShot(600000,&app,SLOT(quit()));//使⽤静态⽅法,在600秒之后退出程序
...
();
}
我们可以在⼀个程序之中使⽤多个timer,每⼀个timer都是有着⾃⼰独⾃的timerId,和window进程的pid类似,我们可以利⽤timerEvent 来处理多个timer:
void timerEvent(QTimerEvent* event)
{
if(event->timerId()== timerId)//使⽤if来判断是那个timer发出的信号
{
// do something
}
}
参考:
程序设计的思路:
1. 先设定定时周期
2. 绑定timeout()信号到⾃定义槽函数
3. 调⽤start函数启动定时器
下⾯是widget窗⼝类中的定义:
class Widget :public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent =nullptr);
~Widget();
private:
Ui::Widget *ui;
QTimer *tim;
public slots:
void onTimeOut();
};
在这⾥定义了⼀个QTimer,还定义了槽函数onTimeOut(),作为timeout信号所对应的槽函数。窗⼝类的构造函数中的代码如下:timeout on t2 timer
Widget::Widget(QWidget *parent):
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
tim =new QTimer();
tim->setInterval(100);
connect(tim,SIGNAL(timeout()),this,SLOT(onTimeOut()));
//connect(tim, &QTimer::timeout, this, &Widget::onTimeOut);
tim->start();
}
在本例中先是设置定时器的定时周期为1s,后⾯⼜进⾏了信号与槽的绑定,最后是启动定时器。定时器处理函数中的代码如下:
void Widget::onTimeOut()
{
static int value =0;
ui->progressBar->setValue(value++);
if(value >100)
tim->stop();
}
参考:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论