Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在QLabel中正确实现倒计时_C++_Qt_Qt5_Qtimer_Qtime - Fatal编程技术网

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"));
}