我有一个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();
更好的解决方案是将进程处理移动到一个单独的线程,并通过信号/槽通知主线程有关进程。