0

我有一个 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;
}

它只在休息后更新 Slider 和 Label。有谁知道为什么?

4

1 回答 1

1

您的主 (UI) 线程正忙于遍历您的 for 循环,并且无法处理事件以更新您的标签。

有一个快速而肮脏的解决方案(未经测试),在后面添加以下行setValue

QCoreApplication::processEvents();

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

于 2014-07-17T12:21:58.677 回答