创建定时器的两种方法:
方法一:
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); id1 = startTimer(1000);//定时器1 id2=startTimer(2000); //定时器2 } void Widget::timerEvent(QTimerEvent *event) { static int num1=1,num2=1; if(event->timerId()==id1) { ui->label->setText(QString::number(num1++)); } else { ui->label_2->setText(QString::number(num2++)); } }
方法二:
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); QTimer *timer=new QTimer(this); connect(timer,&QTimer::timeout,[=](){ static int num=0; ui->label_3->setText(QString::number(num++)); }); connect(ui->pushButton,&QPushButton::clicked,[=](){ static int f=0; if(f==0) { timer->start(500); ui->pushButton->setText("暂停"); f=1; } else { timer->stop(); ui->pushButton->setText("开始"); f=0; } }); // if(ui->pushButton->text()=="暂停") // { // connect(ui->pushButton,&QPushButton::clicked,[=](){ // timer->stop(); // ui->pushButton->setText("开始"); // }); // } // else // { // connect(ui->pushButton,&QPushButton::clicked,[=](){ // timer->start(500); // ui->pushButton->setText("暂停"); // }); // } }
刚开始的想法就是被我注释掉的那些,这样写导致点击暂停没有反应,文本框也不会改变,只有一只点击暂停数字才不再发生变化,最后请教别人是因为不能用两个connect对同一个信号作用不同的槽函数。
比较与两种写法,还是第二种更切合面向对象。