我想借助一些外部程序來優化圖像。程序必須一個接一個地執行,其中一些取決於最後一個程序的輸出,其中一些取決於圖像的特徵。如何在不凍結gui的情況下運行QProcess的同步鏈?
我知道,我可以使用信號,但這在這裏並不是很有用,因爲我必須爲每個外部程序使用幾十個函數和信號,其中一些函數和信號根據位置而定,甚至多次一個程序被稱爲鏈中。逐一執行它們會更容易。但是如果我這樣做,即使沒有顯示狀態消息,GUI也會立即凍結,直到所有進程完成。我還可以做些什麼?
ui->status->setText("Do something with program 1");
QProcess *proc1 = new QProcess;
proc1->setReadChannelMode(QProcess::SeparateChannels);
proc1->start("program 1 -args", QIODevice::ReadWrite);
while(!proc1->waitForFinished(10))
;
ui->status->setText("Do something with program 2");
QProcess *proc2 = new QProcess;
proc2->setReadChannelMode(QProcess::SeparateChannels);
proc2->start("program 2 -args", QIODevice::ReadWrite);
while(!proc2->waitForFinished(10))
;
線程會做。順便說一句,你可以創建一個插槽,比如'on_qprocess_done',準備好命令列表(或者直接生成它們),並用它來代替簡單的阻塞線性算法。 – elmigranto