计时器
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 显示有问题 加粗边框
ui->label->setStyleSheet("border: 1px solid #abc88b");
ui->label_2->setStyleSheet("border: 1px solid #5c7a29");
// 开始计时
startTimer(1000); // 每个1000毫秒 触发一次
}
void Widget::timerEvent(QTimerEvent * ) // 只有参数类型,没有形参!!!
{
static int num=1; // Wooo!! 这个static用的太妙了
ui->label->setText(QString::number(num++));
}
Widget::~Widget()
{
delete ui;
}
多个计时器
如果我要弄两个label都有计时,且计时间隔不一样,这该怎么弄?
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->label->setStyleSheet("border: 1px solid #abc88b");
ui->label_2->setStyleSheet("border: 1px solid #cde6c7");
//计时器
id1 = startTimer(1000); // 每隔1000毫秒 触发一次
id2 = startTimer(2000);
// 誒 在写这个id1和id2时 是在这儿创建并初始化的
// 但却用在了该类的成员函数中 这不闹吗? 把id1和id2变为成员变量就可
}
void Widget::timerEvent(QTimerEvent * e)
{
if(e->timerId() == id1){
static int num=1;
ui->label->setText(QString::number(num++));
}
if(e->timerId() == id2){
static int num2=1;
ui->label_2->setText(QString::number(num2++));
}
}
Widget::~Widget()
{
delete ui;
}
简单记录下代码,详细的还得看文档
QTimer
类
还有一种计时器,直接用QTimer
实例化对象
#include <QTimer>
QTimer *time1 = new QTimer(this);
time1->start(1000);
connect(time1,&QTimer::timeout,this,[=](){
static int n1 = 1;
ui->label_3->setText(QString::number(n1++));
});
//设置一个按钮 点击就停止 两种方式
// connect(ui->btn,&QPushButton::clicked,time1,&QTimer::stop);
connect(ui->btn,&QPushButton::clicked,[=](){
time1->stop();
});
// 设置一个开始按钮 接着上次停止的时刻开始计时
void (QTimer::*st)() = &QTimer::start; // 因为QTimer的start()有重载
connect(ui->btn2,&QPushButton::clicked,time1,st);
有趣的玩意
void (QTimer::*st)() = &QTimer::start;
connect(ui->btn2,&QPushButton::clicked,time1,[=](){
time1->start(1000); // 1000毫秒开始一次
connect(time1,&QTimer::timeout,this,[=](){
static int n1 = 1;
ui->label_3->setText(QString::number(n1++));
});
});
这样组合起来,每点击一次btn2
开始按钮,label_3
显示的计时器跳动间隔会+1
想着把static去掉,会不会正常呢?
结果就是想多了,直接不计时了,一直都是1