带有QElapsedTimer的QT GUI水平滑块setValue

时间:2014-07-17 11:09:17

标签: c++ raspberry-pi qtgui qtonpi

我有一个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。谁知道为什么?

1 个答案:

答案 0 :(得分:1)

您的主(UI)主题正在忙着迭代您的for循环,并且无法处理事件以更新您的标签。

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

QCoreApplication::processEvents();

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