Qt C ++: как добавить простой таймер обратного отсчета? - PullRequest
0 голосов
/ 24 ноября 2018

Я новичок в Qt C ++ и из немногих ресурсов, которые я нашел в сети, я не смог извлечь только бит, необходимый для добавления таймера обратного отсчета в форму.Я не пытаюсь добавить какие-либо кнопки или другие функции.Нужно только иметь таймер, начинающийся с 1:00 и затем уменьшающийся до достижения 0:00, после чего мне нужно показать какое-то сообщение, указывающее пользователю, что время истекло.Я подумал, может быть, добавление метки для отображения таймера было бы простым способом сделать это (но теперь уверен, что я прав в этом).

Пока я создал новый проект приложения Qt, добавил меткув мою основную форму и добавил некоторый код таймера в mainwindow.cpp из того, что я получил в http://doc.qt.io/archives/qt-4.8/timers.html:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //Initialize "countdown" label text
    ui->countdown->setText("1:00");

    //Connect timer to slot so it gets updated
    timer = new QTimer();
    connect(timer, SIGNAL(timeout()), this, SLOT(updateCountdown()));

    //It is started with a value of 1000 milliseconds, indicating that it will time out every second.
    timer->start(1000);
}

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

void MainWindow::updateCountdown()
{
    //do something along the lines of ui->countdown->setText(....);
}

В mainwindow.h я добавил QTimer *timer; в качестве публичного атрибута, а также void updateCountdown(); какчастный слот.

Но я не совсем уверен, как дальше идти дальше.Я думаю, что следующий шаг - уменьшить таймер каждую секунду и показать это на метке «обратный отсчет» (что будет сделано в слоте updateCountdown ), но я не могу узнать, как это сделать.Я также не уверен, как вызвать сообщение (возможно, на QFrame), когда обратный отсчет времени достигает 0: 00.

1 Ответ

0 голосов
/ 24 ноября 2018

Из документации QTimer , функция updateCountdown() вызывается каждую 1 секунду в вашей конфигурации.Таким образом, вы должны уменьшать одну секунду от вашего таймера каждый раз, когда эта функция вызывается, и обновлять в пользовательском интерфейсе.В настоящее время вы нигде не храните свое время, поэтому я предлагаю добавить его как глобальный на данный момент , например QTime time(0, 1, 0) Документация QTime .

Затем внутри updateCountdown(), позвоните time.addSecs(-1);, а затем ui->countdown->setText(time.toString("m:ss"));.Тогда легко проверить, что это «0:00», и сделать что-то еще.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...