2014-07-17 74 views
0

我有一個GUI按鈕,調用一個shell腳本開始錄製視頻。另外我想要一個滑塊來顯示錄製進度(最長錄製時間是30秒)。我建立以下功能:QT GUI水平滑塊setValue與QElapsedTimer

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; 
} 

它只會更新中斷後的滑塊和標籤。有人知道爲什麼

回答

1

您的主要(UI)線程正在遍歷您的for循環,並且無法處理事件以更新您的標籤。

有一個快速和骯髒的溶液(未測試)中,添加以下行setValue後:

QCoreApplication::processEvents(); 

的更好的解決辦法來移動過程中的處理,以一個單獨的線程,並通知有關的主線程通過信號/插槽進行。