0

シェル スクリプトを呼び出してビデオの録画を開始する GUI ボタン​​があります。さらに、録音の進行状況を示すスライダーが必要です (最大録音時間は 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 ループの反復処理でビジー状態になっているため、イベントを処理してラベルを更新することができません。

手っ取り早い解決策 (テストされていません) が 1 つあります。次の行を の後に追加しますsetValue

QCoreApplication::processEvents();

より良い解決策は、プロセス処理を別のスレッドに移動し、シグナル/スロットを介して進行状況をメイン スレッドに通知することです。

于 2014-07-17T12:21:58.677 に答える