Как сделать динамический вывод в 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);
}
Я здесь использовал лямбду (безымянную функцию) для обработчика событий от таймера, но обычно под обработчик создают слот в одном из объектов (который так же владеет и таймером и счетчиком) и цепляются к слоту.