1

为了缩小问题,我在下面创建了一个最小的可验证示例。我正在尝试使用QLabel.

我遇到的问题是,我没有看到时间倒退,而是看到了当前时间。并且没有倒计时。

在最小可验证示例下方:

主窗口.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;
};

主窗口.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();
}

编辑 2

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

我完全按照官方文档进行了操作,但尽管如此,它仍然无法正常工作。除此之外,我还咨询了QTime类,以确保我尊重要调用的成员函数。我还尝试了另一种方法,即将构造函数设置为setHMS并提供与 1 小时相关的正确值,但这也没有用。

我挖了更多,发现这篇文章使用了与我使用的方法非常相似的方法,不同之处在于该示例实现了当前计时器而不是倒计时。这就是为什么timerUpdate()我在函数中减少时间time = time.addSecs(-1);而不是添加时间的原因。但仍然无法正常工作。

感谢您指出解决此问题的正确方向。

4

0 回答 0