본문 바로가기
놀기/Qt

Qt Console Application 종료하기

by Hi~ 2022. 12. 30.

Qt Creator로 새로운 프로젝트를 만들 때, Widget Type 인지 Console Type 인지 선택하게 된다. 여기서 나 같은 바보들은 Console Type이라는 것이 "Hello, World"를 출력하는 간단한 일반적인 main 함수로 구성된 프로그램이라고 생각한다.

 

그런데 웬걸... 실행하면 종료되지 않는다. 어쩔 수 없이 Control + C 를 누르게 된다.

 

Qt는 event loop로 돌아가는 형식으로 아래와 같이 작성할 경우, a.exec() 안에 남게 된다.

#include <QCoreApplication>

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

    return a.exec();
}

 

저 안에서 빠져 나오려면 QCoreApplication::exit(0); 을 호출해야 한다. 그렇다고 무작정 호출할 수는 없다.

검색으로 찾은 예시는 아래와 같은 방식이다. Widget Type이던 Console Type이던 할 일 하고 exit()를 호출하면 된다.

 

예시 1)

#include <QCoreApplication>
#include <QTimer>

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

    QTimer::singleShot(0,[](){
         //do stuff
         QCoreApplication::exit(0);
    });
    return a.exec();
}

 

예시 2)

// runner.h
#ifndef RUNNER_H
#define RUNNER_H

#include <QObject>

class Runner : public QObject {
    Q_OBJECT
public slots:
    void run() ;
};

#endif // RUNNER_H

// main.cpp
#include <QCoreApplication>
#include <QTimer>
#include "runner.h"

void Runner::run() {
    //do stuff
    QCoreApplication::exit(0);
}

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

    Runner r;
    QTimer::singleShot(0, &r, SLOT(run()));

    return a.exec();
}

 

이제 아래와 같이 종료되는 모습을 볼 수 있다.

 

https://forum.qt.io/topic/36208/solved-console-application-does-not-exit

 

[solved] console application does not exit

I have created a console application from the QtCreator wizard. I then wrote this simple code: #include #include using namespace std; int main(int argc, char *argv[]){ QCoreApplication app(argc, argv); int number; cout > number; cout << "the appli...

forum.qt.io

 

댓글