У меня есть слот, который называется передачей некоторых аргументов, используемых в QProcess. Я выполняю внешнюю программу с некоторыми из этих аргументов. Проблема в том, что я хочу иметь очередь для этих процессов, ожидая завершения предыдущего процесса для запуска следующего.Как использовать очередь с QProcess?
Как вы думаете, лучший или самый простой способ?
Вот мой метод/слот:
void FirstCase::CallApp(QString text, QString pathAndFileName)
{
QString command = QString("App1.exe %1 -Z %2").arg(pathAndFileName).arg(message);
QProcess* process = new QProcess(this);
process->start(command);
}
EDIT Здесь решение, если вам это нужно:
Следуя идее QStringList, мой метод CallApp просто добавляет команду к QStringList, как:
list << command;
А затем вызывает функцию Execute();
void FirstCase::Execute()
{
if(!list_.isEmpty()&&!executing_)
{
QProcess* p = new QProcess(this);
QString c = list_.takeFirst();
p->start(c);
executing_=TRUE;
connect(p, SIGNAL(finished(int)),this,SLOT(ExecFinished()));
}
}
void FirstCase::ExecFinished()
{
executing__=FALSE;
Execute();
}
Я настоятельно рекомендую использовать QStringList перегрузку start() с разделенными аргументами. В противном случае вы столкнетесь с кавычками довольно скоро (например, если программа, которую вы выполняете, имеет пробел в своем пути). Версия QStringList() выполняет автоматическое цитирование. –
Вы неправильно используете готовый сигнал, см. Мой ответ ниже. – ismail