한국어
Qt
 

C++ Class QProcess 예제 (프로그램 재시작)

makersweb 2023.01.25 15:57 조회 수 : 5028

응용 프로그램이 재시작하여 새로운 구성을 로드해야하는 경우가 종종 있다. 이럴 때 QProcess 클래스를 사용하여 응용 프로그램을 재시작하는 예제이다. 윈도우의 닫기 버튼을 누르면 앱은 그냥 종료되고 "재시작" 버튼을 누르면 종료 후 다시 실행된다.

qprocess.png

main.cpp

#include "mainwindow.h"

#include <QApplication>
#include <QProcess>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MainWindow w;
    w.show();

    int result = a.exec();

    if (EXIT_RESTART == result || EXIT_RESET == result) {
        qDebug() << "restarting app";
#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
        ::qputenv("LIBGL_ALWAYS_SOFTWARE",
                  Settings.drawMethod() == Qt::AA_UseSoftwareOpenGL && !Settings.playerGPU()
                  ? "1" : "0");
#endif
        QProcess *restart = new QProcess;
        QStringList args = a.arguments();
        if (!args.isEmpty())
            args.removeFirst();
        restart->start(a.applicationFilePath(), args, QIODevice::NotOpen);
        result = EXIT_SUCCESS;
    }
    return result;
}

mainwindow.cpp

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , m_exitCode(EXIT_SUCCESS)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    if (m_exitCode == EXIT_SUCCESS) {
        QApplication::quit();
        qDebug() << "end";
        ::_Exit(0);
    } else {
        QApplication::exit(m_exitCode);
        qDebug() << "end";
    }
}

// Restart Application
void MainWindow::on_pushButton_clicked(bool checked)
{
    m_exitCode = EXIT_RESTART;
    QApplication::closeAllWindows();
}

 

qprocess_example.zip

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 118375
80 QML과 JavaScript 의 숫자 관련 내장된 함수 makersweb 2021.03.28 6179
79 QOpenVirtualkeyboard(Qt 5용 한글 및 영문, 숫자 가상키보드) file makersweb 2019.11.27 6171
78 QML의 사용자 정의 Image makersweb 2023.09.17 6168
77 Qt MQTT의 pus/sub 튜토리얼 file makersweb 2021.02.06 6140
76 Base64로 인코딩된 파일을 복원 makersweb 2023.08.06 6097
75 [Qt] Google Play의 향후 요구 사항을 준수하는 방법 [2] j2doll 2019.07.29 6052
74 Qt5기반 독립 프로세스(out-of-process)로 동작하는 가상키보드(virtual keyboard) file makersweb 2019.02.24 5967
73 VTK 를 사용해서 강력한 시각화(3D, Plotting, Chart)Qt 응용프로그램 개발하기 file makersweb 2022.10.16 5902
72 컨테이너에 적재된 객체를 편리하게 삭제하기 makersweb 2019.09.18 5883
71 Loader를 사용하여 동적으로 QML 로드 makersweb 2021.01.19 5873
70 clazy 로 13개의 시그널, 슬롯 오류 해결 makersweb 2022.08.23 5841
69 QPA 플러그인과 HTML5 Backend file makersweb 2017.12.27 5824
68 Qt3D의 QML 타입으로 3D렌더링 file makersweb 2019.11.20 5802
67 QThread 및 QMutex 예제 makersweb 2021.01.12 5762
66 웹기반 Qt Design Viewer [2] file makersweb 2019.10.23 5711
65 Qbs에 대한 소개와 설치하는 방법 makersweb 2019.10.09 5710
64 Q_D매크로와 d-pointer file makersweb 2019.05.07 5670
63 최초의 Qt 6.0 스냅샷 제공 (First Qt 6.0 Snapshot Available) j2doll 2020.06.21 5661
62 MCU용 Qt에 대해서 makersweb 2019.08.22 5619
61 QOpenGLWidget 을 투명하게 적용 file makersweb 2020.02.05 5601