主要任务
1.掌握定时器的初始化
2.掌握两种定时器的QT写法
3.匹配按钮完成计时与停止的窗口搭建
I.QTimerEvent()函数
定时函数QTimerEvent包含了startTimer(),killTimer(),event()函数,其中常用的startTimer(),killTimer()分别为定时开始与指定定时器停止函数。
I.定时器1函数
一个定时器
首先在父类中定义好所需的函数与变量,方便调用。
这里我定义了重写定时器事件与两个接受不同间隔计时的函数
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
//重写定时器事件
void timerEvent(QTimerEvent *);
int id1;
int id2;
private:
Ui::Widget *ui;
};
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
//重写定时器事件
void timerEvent(QTimerEvent *);
int id1;
int id2;
private:
Ui::Widget *ui;
};
随后在widget.cpp中定义静态变量num初始化计时为1,通过ui控件联系到label标签中另其没调用一次计数加一。
void Widget::timerEvent(QTimerEvent *ev)
{
static int num1 =1;
ui->label->setText(QString::number(num1++));
}
void Widget::timerEvent(QTimerEvent *ev)
{
static int num1 =1;
ui->label->setText(QString::number(num1++));
}
最后在主函数中调用函数开始计时startTimer()。
多个定时器
当使用多个定时器时,为方便明确不同间隔的定时器,采用int类型的变量接收不同的定时器。在父类中申明两个int类型变量,分别用来接收间隔一秒与间隔2秒。
id1 = startTimer(1000); //参数为ms开始启动定时器 1s
id2 = startTimer(2000); //参数为ms开始启动定时器 2s
//定时器第一种方式 直接用函数传参,starttimer开始计时,函数功能实现
id1 = startTimer(1000); //参数为ms开始启动定时器 1s
id2 = startTimer(2000); //参数为ms开始启动定时器 2s
//定时器第一种方式 直接用函数传参,starttimer开始计时,函数功能实现
定时器重写函数用if判断语句,判断不同间隔定时器
void Widget::timerEvent(QTimerEvent *ev)
{
if(ev->timerId() == id1)
{
static int num1 =1;
ui->label->setText(QString::number(num1++));
}
if(ev->timerId() == id2)
{
static int num2 =1;
ui->label2->setText(QString::number(num2++));
}
}
void Widget::timerEvent(QTimerEvent *ev)
{
if(ev->timerId() == id1)
{
static int num1 =1;
ui->label->setText(QString::number(num1++));
}
if(ev->timerId() == id2)
{
static int num2 =1;
ui->label2->setText(QString::number(num2++));
}
}
II.定时器2函数
定时器2函数写法主要是声明一个QTimer的对象,通过对象调用函数开始停止,connect函数连接信号和槽。(这里我加入了按键,当按下计时开始计数,当按下停止时停止计时。)
//定时器的第二种方式 采用设置一个对象,通过对象调用函数开始停止,connect函数连接信号和槽
QTimer *timer = new QTimer(this);
//启动定时器
//timer->start(500);
connect(ui->pushButton,&QPushButton::clicked,[=](){
timer->start(500);
});
connect(ui->pushButton2,&QPushButton::clicked,[=](){
timer->stop();
});
connect(timer,&QTimer::timeout,[=](){
static int num3 =1;
ui->label3->setText(QString::number(num3++));
});
//定时器的第二种方式 采用设置一个对象,通过对象调用函数开始停止,connect函数连接信号和槽
QTimer *timer = new QTimer(this);
//启动定时器
//timer->start(500);
connect(ui->pushButton,&QPushButton::clicked,[=](){
timer->start(500);
});
connect(ui->pushButton2,&QPushButton::clicked,[=](){
timer->stop();
});
connect(timer,&QTimer::timeout,[=](){
static int num3 =1;
ui->label3->setText(QString::number(num3++));
});
III.效果图展示
打开窗口定时器1类型的两个label直接开始计时,间隔分别为2s与1s。
启动后定时器2类型的label开始计时