Две возможные точки: QProcess ::: state() не входит в цикл событий Qt - поэтому вызов его неоднократно не обновляет ваше приложение; вся ваша логика Qt висит. И проверьте инициализацию progressBar: если свойство progressBar «максимум» не равно 100, оно не достигнет 100%. Ваш «вал» также игнорирует максимум «ProgressBar», поэтому необходимо исправить:
if(val < ui->progressBar->maximum())
ui->progressBar->setValue(val++);
Большинство рабочих мест имеют четкую концепцию прогресса, которая не очевидна здесь. Ваш цикл while может быть слишком быстрым, чтобы визуально распознавать шаги прогресса. Попробуйте подставить цикл while парой сигналов/слотов, чтобы синхронизировать progressBar. Это также позволит Qt периодически вводить цикл событий для обновления вашего приложения. Рассмотрите возможность использования сигнала QProcess :: readyReadStandardOutput(), если вызываемый процесс выдает что-то разумное для stdout. Возможно, ваш процесс что-то делает, т. Е. Заполняет буфер, размер которого вы можете использовать для указания прогресса - или просто выводит счетчик на stdout. Позвольте мне эскиз здесь:
.. Somewhere in your my_app constructor ...
.. ui->progressBar->setRange(0, 100); ..
.. connect(this, SIGNAL(processProgressSignal(int)), this, SLOT(progressSlot(int)); ..
.. connect(&process, SIGNAL(readyReadStandardError()), this, SLOT(processProgress())); ..
Q_SIGNALS:
void processProgressSignal(int val);
Q_SLOTS:
void my_app::processProgress()
{
int val = 1;
// Insert your process progress calculation here
// Example: Parse the result of QByteArray QProcess::readAllStandardOutput()
// Example: val = (buffer.currLength/buffer.maxLength) * 100;
Q_EMIT processProgressSignal(val);
}
void my_app::progressSlot(int val)
{
if(val < ui->progressBar->maximum())
ui->progressBar->setValue(val++);
}
Если это не поможет, чтобы убедиться, что process.state() в 100 раз «истина» - разрешить 100 итераций Вашего цикла. qDebug() - ваш друг!
Удачи!
Помогло бы, если бы мы могли видеть, что происходит в process.state(), я полагаю ... –
Выглядит хорошо. Проблема должна быть внутри process.state(). –