如何使用qt实现计时器?

时间:2019-11-25 16:51:27

标签: c++ qt

我写了一个c ++ qt程序。我尝试使用lcdnumber实现一个倒数计时器,并且在slot函数中,我使用了一个qtime对象来跟踪当前时间,并使用了三个int h,m,s来标记倒数时间。

我认为s-time.second应该是显示时间的第二部分,而且事实总是显示为0。

如果我让它显示time.second减去3({time.second-3)这样的静态数字,那么它将起作用。

h,m,s一直在变化吗? 我该怎么办?

 QTime time = QTime::currentTime();
int s=time.second();
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{


    QTimer* timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(showTime(int)));
    timer->start(10);

    ui->setupUi(this);
}

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


        QTime time = QTime::currentTime();
        int b=(s-time.second()+60)%60;

        auto o=QTime(h,m,b,0);
        QString timestr = o.toString("hh:mm:ss"); 

        ui->lcdNumber->display(timestr);
}
···

2 个答案:

答案 0 :(得分:0)

您可以使用两个计时器来实现此目的。启动第一个计时器以跟踪经过的时间。第二个用于跟踪剩余时间。

countdown = QTime(0, 1, 30); // one minute and thirty seconds
timer.start()

然后在计时器回调中,可以从countdown中减去经过的时间,以获取剩余时间。

int elapsed_ms = timer.elapsed();
countdown.addMSecs( - elapsed_ms);

答案 1 :(得分:0)

感谢托马斯,问题得以解决。关键是使用double计时器。一个是qtimer,另一个是qelapsed计时器。 qtime组件用于将信号不断发送到插槽功能,并且在插槽功能中,int elapsed_ms = timer.elapsed(); countdown.addMSecs(-elapsed_ms)可以实现倒数计时器。 代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QTime>

#include <QDate>

#include <QTimer>

#include <QDebug>
#include<QElapsedTimer >

QElapsedTimer etimer;
QTimer* timer = new QTimer();
auto countdown=QTime(0,1,30);

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    etimer.start();

    connect(timer, SIGNAL(timeout()), this, SLOT(showTime()));
    timer->start(10);
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::showTime(){
    auto elapsed =etimer.elapsed();
    auto c=countdown.addMSecs(-elapsed);
    QString timestr = c.toString("hh:mm:ss.zzz"); //设置时间格式
    ui->lcdNumber->display(timestr);
}