如何使用2 QTimer?一个用于计数,另一个用于显示



我想用Qt用c++计时。我的代码中有一个计时器,但屏幕上显示的时间很慢。计时器->start(500(必须每20秒更新一次。

我想用两个定时器。一个用于更新和计数时间,另一个定时器将显示在屏幕上。我该怎么做,如果你能帮助,我会很高兴

这是我的代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QPushButton>

QTimer *timer = new QTimer();
QTimer *timer2 = new QTimer();
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(timer,
SIGNAL(timeout()),
this,
SLOT(functionstart())
);    
}

void MainWindow::functionStart()
{    
int count;   
count = ui->lcdNumber->value();
count++;
ui->lcdNumber->display(count);
}
MainWindow::~MainWindow()
{
delete ui;    
}
void MainWindow::on_pushButton_clicked()
{    
if(timer->isActive()){
timer->stop();
ui->pushButton->setText("Start");
}
else {
timer->start(500); 
ui->pushButton->setText("Stop");
}
}

当您启动这样的计时器时计时器->start(500(它将每500ms(0.5秒(超时一次,因此如果您想要一个超时20秒的计时器,您可以使用计时器->启动(20000(。现在,如果你想要另一个计时器来更新显示,你可以用你喜欢的周期启动计时器2,并将其连接到另一个插槽来更新UI,如下所示:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QPushButton>
QTimer *timer = new QTimer();
QTimer *timer2 = new QTimer();
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(timer, SIGNAL(timeout()), this, SLOT(functionStart()));
connect(timer2, SIGNAL(timeout()), this, SLOT(updateDisplay()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::functionStart()
{
count += 1;
}
void MainWindow::updateDisplay()
{
ui->lcdNumber->display(count);
}
void MainWindow::on_pushButton_clicked()
{
if(timer->isActive() & timer2->isActive())
{
timer->stop();
timer2->stop();
ui->pushButton->setText("Start");
}
else
{
timer->start(1000);
timer2->start(20000);
ui->pushButton->setText("Stop");
}
}

我将计数定义移动到MainWindow头文件以保持其值。

我为它添加了qDebug部分。当我这样做时,我可以在控制台上看到它在一秒钟内刷新20次。但仍然没有任何变化。这是我的代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QPushButton>
#include <QDebug>
QTimer *timer = new QTimer();
QTimer *timer2 = new QTimer();


MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);

connect(timer, SIGNAL(timeout()), this, SLOT(functionStart()));
connect(timer2, SIGNAL(timeout()), this, SLOT(updateDisplay()));

}
MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::functionStart()
{
count += 1;
}
void MainWindow::updateDisplay()
{

ui->lcdNumber->display(count);
qDebug() << "asadsf";
}

void MainWindow::on_pushButton_clicked()
{

if(timer->isActive() & timer2->isActive())
{
timer->stop();
timer2->stop();
ui->pushButton->setText("Start");
}
else
{
timer->start(40);
timer2->start(50);
ui->pushButton->setText("Stop");
}

}

相关内容

最新更新