QT GUI Горизонтальный ползунок setValue с QElapsedTimer

У меня есть кнопка GUI, которая вызывает сценарий оболочки, чтобы начать запись видео. Кроме того, я хочу, чтобы ползунок отображал ход записи (максимальное время записи — 30 секунд). Я строю следующую функцию:

coid MainWindow::on_recordStart_clicked()
{
QElapsedTimer timer;
QProcess *Prozess = new QProcess();
Prozess->start("record.sh");
timer.start();
for(;;)
{
ui->timelineLabel->setText(QString::number(timer.elapsed())); //label
ui->timeLine->setValue(timer.elapsed());  //slider
if (timer.hasExpired(30000)) break;
}

Он обновляет ползунок и метку только после перерыва. Кто-нибудь знает почему?

0

Решение

Ваш основной поток (UI) занят итерациями по циклу for и не сможет обрабатывать события для обновления метки.

Существует одно быстрое и грязное решение (не проверено), добавьте следующую строку после setValue:

QCoreApplication::processEvents();

Лучшее решение — переместить обработку процесса в отдельный поток и уведомить основной поток о ходе выполнения через сигнал / слот.

1

Другие решения


По вопросам рекламы [email protected]