将QProcess与QProgressbar连接

时间:2013-09-08 07:55:02

标签: qt qt4 qt5 qprocess qprogressbar

我有这个代码,但它没有工作。我正在尝试更新进度条,而我的视频正在转换。视频转换很好,但progessbar没有更新

void MainWindow::on_pushButton_clicked()
{
QString alienpath="ffmpeg";
QStringList argument;

argument<<"-i"<<ui->lineEdit->text()<<"/home/suraj/a.flv";
QProcess *alien=new QProcess(this);
alien->start(alienpath,argument);
int p;
p=alien->readAll().toInt();
ui->progressBar->setMaximum(0);
ui->progressBar->setMinimum(100);
ui->progressBar->setValue(p);
}

plz help

1 个答案:

答案 0 :(得分:0)

  • 首先,在代码中配置后,您的进度条似乎永远不会更新。您可能希望使用QTimerreadyRead / readyReadStandardOutput信号连接到MainWindow或C ++ 11 lambda中的某个插槽,但我不确定每次输出将包含什么,所以我不知道这是否有效。
  • 其次,您的toInt()可能会失败。仅当您的输出包含纯数字67时,它才有效;应用程序通常会产生大量输出。使用QRegExpQRegularExpression(Qt5)提取数字并仅转换它们。 toInt()支持检查转换错误是否发生,请参阅文档。