У меня есть кнопка 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;
}
Он обновляет ползунок и метку только после перерыва. Кто-нибудь знает почему?
Ваш основной поток (UI) занят итерациями по циклу for и не сможет обрабатывать события для обновления метки.
Существует одно быстрое и грязное решение (не проверено), добавьте следующую строку после setValue
:
QCoreApplication::processEvents();
Лучшее решение — переместить обработку процесса в отдельный поток и уведомить основной поток о ходе выполнения через сигнал / слот.