C++ 如何在QLabel中正确实现倒计时
为了缩小这个问题,我在下面创建了一个最小的可验证示例。 我正在尝试使用C++ 如何在QLabel中正确实现倒计时,c++,qt,qt5,qtimer,qtime,C++,Qt,Qt5,Qtimer,Qtime,为了缩小这个问题,我在下面创建了一个最小的可验证示例。 我正在尝试使用QLabel实现60分钟倒计时 问题是,我没有看到时间倒流,而是看到当前时间向前。没有倒计时 下面是最小可验证示例: main window.h #include <QMainWindow> #include <QTime> #include <QTimer> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAME
QLabel
实现60分钟倒计时
问题是,我没有看到时间倒流,而是看到当前时间向前。没有倒计时
下面是最小可验证示例:
main window.h
#include <QMainWindow>
#include <QTime>
#include <QTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
public slots:
void timerUpdate();
private:
Ui::MainWindow *ui;
QTimer *timer;
QTime time;
};
main.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//ui->countDown->setText(time.currentTime().toString("hh:mm:ss"));
ui->countDown->setText("60:00");
//ui->countDown->setText(time.toString("hh:mm:ss"));
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate()));
timer->start(1000);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::timerUpdate()
{
time = time.addSecs(-1);
ui->countDown->setText(time.currentTime().toString("hh:mm:ss"));
}
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
我完全遵循了这个原则,但尽管如此,它仍然不起作用。除此之外,我还咨询了全班,以确保我尊重要调用的成员函数。
我还尝试了另一种方法,将构造函数设置为并提供与1小时相关的正确值,但这也不起作用
我挖掘了更多信息,发现它使用了与我使用的非常相似的方法,不同之处在于示例实现了一个当前计时器,而不是倒计时。这就是为什么在timerUpdate()
函数中我在减少时间time=time.addSecs(-1)代码>而不是添加它。但仍然不起作用
感谢您为解决此问题指明了正确的方向。time.currentTime()
是您的错误。它获取的是一天中的当前时间,而不是存储在time对象中的时间。感谢您前来阅读问题。我修正了错误,但什么也没看到。标签似乎消失了。我用编辑2更新了问题,以显示我所做的。知道我遗漏了什么吗?好的,它正在工作!实际上,我必须使用setHMS
在cnstructor中初始化它。time.currentTime()
是您的错误。它获取的是一天中的当前时间,而不是存储在time对象中的时间。感谢您前来阅读问题。我修正了错误,但什么也没看到。标签似乎消失了。我用编辑2更新了问题,以显示我所做的。知道我遗漏了什么吗?好的,它正在工作!实际上,我必须使用setHMS
在cnstructor中初始化它。
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//ui->countDown->setText(time.toString("hh:mm:ss"));
//ui->countDown->setText("60:00");
ui->countDown->setText(time.toString("hh:mm:ss"));
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate()));
timer->start(1000);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::timerUpdate()
{
time = time.addSecs(-1);
ui->countDown->setText(time.toString("hh:mm:ss"));
}