qt+vs利用QTimer创建倒计时报错
.h
#pragma once
#include
#include "ui_QtWidgetsApplication2.h"
#include"qtimer.h"
class QtWidgetsApplication2 : public QMainWindow
{
Q_OBJECT
public:
QtWidgetsApplication2(QWidget *parent = nullptr);
~QtWidgetsApplication2();
QTimer *timer;
private:
Ui::QtWidgetsApplication2Class ui;
private slots:
void a();
};
.cpp
#include "QtWidgetsApplication2.h"
QtWidgetsApplication2::QtWidgetsApplication2(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QTimer *timer = new QTimer();
connect(timer, &QTimer::timeout, this, &QtWidgetsApplication2::a);
timer->start(1000);
}
QtWidgetsApplication2::~QtWidgetsApplication2()
{}
void QtWidgetsApplication2::a()
{
for (int i = 100; i > 0; i--)
{
this->ui.label->setText(QString::number(i));
}
timer->stop();
}
把构造函数里的
QTimer *timer = new QTimer();
改成
timer = new QTimer();
该回答引用ChatGPT
在 QtWidgetsApplication2::a() 方法中,您的 for 循环在短时间内执行了 100 次,因此您只能看到标签中显示的最后一个值 1,因为在循环结束后,该值将在标签中设置。
您需要更改循环以在不同的定时器间隔内减少计数器值。此外,您需要将 timer 的指针从 QtWidgetsApplication2 构造函数中的局部变量更改为类成员以便在 a() 方法中访问。