당신은 프로세스의 finished
신호에 연결해야합니다. 프로세스가 완료 될 때마다 코드가 호출됩니다. 예 :
// 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();
}
에서 ['waitForFinished'] (http://doc.qt.io/qt-5/qprocess.html#waitForFinished) 함수 또는 ['finished'] (HTTP 문제의 새로운 기능 : // 문서 .qt.io/qt-5/qprocess.html # finished) 완료되면 즉시 알려주는 신호입니까? –
@JamesAdkison 두 가지 제안은 같은 문장에 속하지 않습니다. 'waitForFinished'는 UI를 응답하지 않게 만드는 블로킹 메소드입니다. 그것은 대화식 스레드에서 사용하기위한 것이 아닙니다. –
@KubaOber 나는 당신의 의견을 따르지 않습니다. 첫 번째 (_or_ 이전)는 차단 기능이고 두 번째 (_or_ 후)는 Qt 신호 슬롯 메커니즘을 사용하는 비 차단 솔루션입니다. –