QT GUI水平滑块setValue与QElapsedTimer
QT GUI Horizontal Slider setValue with QElapsedTimer
我有一个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();
更好的解决方案是将进程处理移动到一个单独的线程,并通过信号/槽通知主线程有关进程。
相关文章:
- 在Qt小部件应用程序中,在重载的"paintEvent"中的"setValue"
- QProgressBar::setValue(int) 会导致内存泄漏
- 写入.ini文件 - SimpleIni SetValue 尽管看起来成功了,但什么也没做
- 模态qprogressdialog :: setValue()导致嵌套事件循环崩溃
- 在QT中"ui->scrollArea->horizontalScrollBar()->setValue(0)"没有效果
- QTProgressBar 在运行 setValue 时不更新
- 正在创建具有默认值或setValue的构造函数
- QSettings(Qt 5.4): setValue 无法正常工作
- QT GUI水平滑块setValue与QElapsedTimer
- ATL如何转换BSTR* str到注册表项.SetValue(LPCTSTR字符串类型)