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
'놀기 > Qt' 카테고리의 다른 글
[QT] 공백 (whitespace) 제거 (0) | 2023.02.11 |
---|---|
Qt에서 cppcheck 사용하기 (0) | 2022.12.31 |
Qt QLabel로 Drag & Drop Widget 만들기 (0) | 2022.10.11 |
Qt Creator 조금이라도 빠르게 - Updates Check 끄기 (0) | 2022.10.11 |
QCustomPlot를 사용해서 Ping 결과를 그래프로 표시하기 (0) | 2022.08.10 |
댓글