한국어
Qt
 

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

makersweb 2023.01.25 15:57 조회 수 : 1262

응용 프로그램이 재시작하여 새로운 구성을 로드해야하는 경우가 종종 있다. 이럴 때 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 87945
79 ApplicationWindow 와 메뉴바(MenuBar)구성 file makersweb 2020.01.04 1656
78 QML에서 undefined를 확인하는 방법 makersweb 2017.11.29 1622
77 Qt Quick 3D 소개 makersweb 2019.11.09 1605
76 QML과 JavaScript 의 숫자 관련 내장된 함수 makersweb 2021.03.28 1579
75 싱글터치 스크린 및 임베디드 리눅스 기반에서 Qt 터치입력 makersweb 2018.12.24 1527
74 QThread 및 QMutex 예제 makersweb 2021.01.12 1505
73 Qbs에 대한 소개와 설치하는 방법 makersweb 2019.10.09 1497
72 qInstallMessageHandler를 이용한 디버그 메세지 출력 제어하기 makersweb 2019.02.25 1496
71 tslib의 ts_calibrate를 응용해서 Qt로 터치보정기능 구현 file makersweb 2019.04.06 1494
70 웹기반 Qt Design Viewer [2] file makersweb 2019.10.23 1410
69 Qt 스마트 포인터 (QSharedPointer, QScopedPointer, QPointer) makersweb 2022.08.18 1400
68 재진입(Reentrancy) 및 스레드 안전성(Thread-Safety) makersweb 2020.04.19 1376
67 Qt 하이브리드 애플리케이션(Hybrid App) 개발 file makersweb 2023.02.08 1352
66 많은 리소스를 사용하는 Qt프로젝트에서 고려해봐야 할 qmake 옵션 makersweb 2019.10.11 1334
65 Qt 6의 비동기 API makersweb 2020.10.19 1331
» QProcess 예제 (프로그램 재시작) file makersweb 2023.01.25 1262
63 QMake 프로젝트를 CMake 프로젝트로 변환 with qmake2cmake makersweb 2022.09.17 1222
62 Qml에서 커튼효과 구현 예제 - Shader Effects file 운영자 2018.12.05 1221
61 안드로이드 가상장치 사용 file makersweb 2019.01.13 1203
60 QOpenGLWidget 을 투명하게 적용 file makersweb 2020.02.05 1195