Как сделать динамический вывод в label?

Пишу программу на с++ и мне надо сделать так чтобы текст в лейбле менялся динамически. Тоесть как пример:

for (int i = 0; i < 50;i++) {
 ui->label->setNum(i);
 }

но естественно в такой программе ничего работать не будет, тоесть после нажатия просто сразу выводит 49. А как сделать так что бы я видел как это меняется ? "1..2..3....45"? Пробовал такие вещи как label->repaint и label->update,но ничего не помогло.


Ответы (1 шт):

Автор решения: Sergei Ozerov

Вам нужно создать таймер. Грубый пример может выглядеть примерно так

#include <QTimer>

QtTestApp::QtTestApp(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    connect(ui.pushButton, &QPushButton::clicked, this, &QtTestApp::on_clicked);
}

void QtTestApp::on_clicked()
{
    static int counter = 0;
    QTimer* timer = new QTimer;
    QObject::connect(timer, &QTimer::timeout, [this, timer]() {
        ui.label->setNum(counter);
        counter++;
        if (counter > 50)
            timer->deleteLater();
    });
    timer->start(1000);
}

Я здесь использовал лямбду (безымянную функцию) для обработчика событий от таймера, но обычно под обработчик создают слот в одном из объектов (который так же владеет и таймером и счетчиком) и цепляются к слоту.

→ Ссылка