gpt4 book ai didi

c - QT 计时器(开始/暂停)

转载 作者:行者123 更新时间:2023-11-30 15:19:18 26 4
gpt4 key购买 nike

我正在尝试在 Qt 中实现一个计时器,并且我有一个开始/暂停(单个按钮)和一个重置按钮。当我单击开始按钮时,它会启动计时器,按钮上的文本会更改为暂停,当我再次单击暂停时,文本会更改回开始,并且时间 XX:XX:XX 会暂停,但是当我单击开始时计时器再次回到 00:00:00(它清除计时器并从头开始计数)。我不知道发生了什么事,也不知道如何阻止这一切。

另一方面,重置按钮似乎工作正常。

我尝试纠正它,我发现的唯一有效方法是当我包含 now = time(NULL); 当按下按钮时,计时器从 00:00:00 开始。否则它会保留系统计时器的时间并以随机数开头。

非常感谢任何帮助。对于给您带来的任何不便,我们深表歉意。

IncDisplay::IncDisplay(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::IncDisplay),
running(false),
elapsed(0), s(0), m(0), h(0)
{

connect(&timer, SIGNAL(timeout()), this, SLOT(updateDisplay()));
time(&now);
timer.start(10);
ui->timer->display("00:00:00");
updateDisplay();
}

IncDisplay::~IncDisplay()
{
delete ui;
}

void IncDisplay::updateDisplay()
{
QTime timex = QTime::currentTime();
QString text = timex.toString("hh:mm");

ui->clock->display(text);

if (running) {
double sec = difftime(time(NULL), now);
s = (int)sec % 60;
m = (int)(sec / 60) % 60;
h = (int)(sec / 3600) % 60;


QString text = QString().sprintf("%02d:%02d:%02d", h, m, s);
ui->timer->display(text);
}
}

void IncDisplay::on_start_clicked()
{
running = !running;

if (running) {
now = time(NULL);
ui->start->setText("Pause");
}
else {
ui->start->setText("Start");
}
}

void IncDisplay::on_reset_clicked()
{
running = false;
elapsed = 0;
ui->start->setText("Start");
ui->timer->display("00:00:00");
}

最佳答案

我建议保留一个带有耗时的 QTime 对象:

IncDisplay::IncDisplay(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::IncDisplay),
elapsed(0, 0, 0), // a QTime object
interval(10) // an interger containing timer interval
{
connect(&timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
timer.start(interval);
updateDisplay();
}

void IncDisplay::onTimeout()
{
elapsed = elapsed.addMSecs(timer.interval());
updateDisplay();
}

void IncDisplay::updateDisplay()
{
ui->timer->display(elapsed.toString("hh:mm:ss"));
}

void IncDisplay::on_start_clicked()
{
if (timer.isRunning())
{
timer.stop();
ui->start->setText("Start");
}
else
{
timer.start(interval);
ui->start->setText("Pause");
}
}

void IncDisplay::on_reset_clicked()
{
timer.stop();
ui->start->setText("Start");
elapsed = QTime(0, 0, 0);
updateDisplay();
}

关于c - QT 计时器(开始/暂停),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30773698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com