한국어
Qt
 

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

makersweb 2023.01.25 15:57 조회 수 : 1076

응용 프로그램이 재시작하여 새로운 구성을 로드해야하는 경우가 종종 있다. 이럴 때 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 86945
19 Qt의 스레드간 시그널 슬롯의 커넥션타입 [1] makersweb 2015.10.24 10369
18 Ubuntu Linux에서 Qt Creator 설치 file makersweb 2016.03.06 10751
17 Qt 응용프로그램 배포(windows) file makersweb 2018.10.10 11612
16 Qt Installer Framework - 패키징, 설치프로그램 제작 file makersweb 2018.10.14 11833
15 QtSerialPort를 사용한 시리얼(Serial)통신 [3] makersweb 2019.05.21 12258
14 Qml 기본 컴포넌트 강좌 (1) file makersweb 2019.01.03 12281
13 Qt의 오픈소스 라이센스 소개 file makersweb 2019.12.15 12853
12 Windows에서 라즈베리파이3용 Qt5.10.0 크로스컴파일 [20] file makersweb 2018.02.23 13284
11 QML과 QtQuick 모듈 개념과 기본 타입들 makersweb 2019.04.26 13555
10 Qml과 C++로 구현하는 GUI어플리케이션 file makersweb 2018.12.25 14243
9 Qt 프로그래밍의 시작 makersweb 2015.10.25 14510
8 초보자를 위한 첫번째 프로젝트 - QML로 만드는 Hello World file makersweb 2018.03.16 14681
7 QtCreator Design으로 GUI만들기 (QML로 만드는 Hello World -2) [1] file makersweb 2019.05.26 15190
6 QThread 소개 및 예제 makersweb 2019.12.25 19915
5 Qt의 시그널 슬롯 시스템 file makersweb 2015.10.20 23927
4 Windows에서 Qt 설치 따라하기 file makersweb 2019.10.14 31103
3 QString 문자열 다루기 예제 운영자 2019.01.26 41039
2 콘솔에서 사용자 입력받기 file makersweb 2020.03.22 51928
1 가상키보드(Qt Virtual Keyboard)를 사용하는 방법 [32] file makersweb 2019.05.03 223178