あなたは、プロセスのfinished
信号に接続する必要があります。プロセスが終了すると、コードが呼び出されます。例えば。 //ドキュメント:[ `waitForFinished`](http://doc.qt.io/qt-5/qprocess.html#waitForFinished)関数または[` finished`](HTTPと間違って何
// https://github.com/KubaO/stackoverflown/tree/master/questions/process-finished-msg-38232236
#include <QtWidgets>
class Window : public QWidget {
QVBoxLayout m_layout{this};
QPushButton m_button{tr("Sleep")};
QMessageBox m_box{QMessageBox::Information,
tr("Wakey-wakey"),
tr("A process is done sleeping."),
QMessageBox::Ok, this};
QProcess m_process;
public:
Window() {
m_layout.addWidget(&m_button);
m_process.setProgram("sleep");
m_process.setArguments({"5"});
connect(&m_button, &QPushButton::clicked, &m_process, [=]{ m_process.start(); });
connect(&m_process, (void(QProcess::*)(int))&QProcess::finished, [=]{ m_box.show(); });
}
};
int main(int argc, char ** argv) {
QApplication app{argc, argv};
Window window;
window.show();
return app.exec();
}
.qt.io/qt-5/qprocess.html#finished)シグナルが終了したらすぐに通知しますか? –
@JamesAdkison 2つの提案は同じ文章には含まれていません。 'waitForFinished'は、UIを応答不能にするブロッキングメソッドです。これは、インタラクティブなスレッドで使用するためのものではありません。 –
@KubaOber私はあなたのコメントに追随していません。最初の(_or_より前)はブロッキング関数で、2番目の(_or_の後)はQtシグナルスロットメカニズムを使用するノンブロッキングソリューションです。 –