QT GUI水平滑块setValue与QElapsedTimer

QT GUI Horizontal Slider setValue with QElapsedTimer

本文关键字:setValue QElapsedTimer 平滑 GUI 水平 QT      更新时间:2023-10-16

我有一个GUI按钮,调用shell脚本开始录制视频。此外,我想要一个滑块显示录制进度(最大录制时间为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();

更好的解决方案是将进程处理移动到一个单独的线程,并通过信号/槽通知主线程有关进程。