• 프로젝트 생성

QtCreator를 이용하여 새로운 콘솔 프로젝트를 아래와 같이 생성해 보자. 나는 관행적으로 D드라이브에 _dev라는 폴더를 두고 그 아래에 개발 관련 프로젝트를 모아 놓는다. 편한곳에 생성하면 된다.

 

다음으로 이동하면 처음부터 당황스런 화면이 나온다. 기본값은 qmake 이니 그대로 선택하여 다음으로 가자. qt6부터는 cmake가 기본이라고도 하던데 뭐가 다른지는 그때 고민해 보자.

다음을 눌러보자. 뭔가 더 복잡한게 나왔다. 이것은 Qt가 다국어를 처리하기위 지원하는 파일이다. 실무적으로 개발하기 전까지는 항상  none으로 설정하겠다. 다음.

 

뭔가 더 복잡한게 나왔다. 키트를 선택하란다. 키트란 뭔가? 그동안 대충 다음으로 넘어갔지만 이번 정리를 위해 좀더 찾아 보았다. 키트란 결국 배포하려는 플랫폼을 의미한다. 나는 여러 버전의 Qt를 설치했으므로 많이 나오지만 여러분은 좀 다르게 나올것이다. 적절히 Qt5 버전대를 선택하라. 

None으로 그대로 두고 다음으로 넘어간다. 마찬가지로 실무적으로 이용할 경우 version control은 당연히 하겠지만 이 정리에선 하지 않겠다. 

 

  • 프로젝트 구성

자 드디어 익숙한 소스 코드가 보인다. 개발자라면 무수히 보았을 main.cpp 소스 파일 하나과 뭔지 모를 HelloWorld.pro 파일 하나가 덩그러니 있다.

 

 이 pro 파일이 Visual Stuio에서의 프로젝트 파일 역할을 한다.  하지만 훨씬 직곽적이고 수정하기가 용이하다. 아래를 보면 콘솔 프로젝트 임으로 gui 가 프로젝트에서 배제되어 있음을 알 수 있다. 또한 C_++11 기반으로  개발하고 있으며 main.cpp가 project에 등록되어 있음을 알 수 있다. Qt는 이렇게 +=, -=통해 속성들을 추가, 삭제할 수 있다.

 

 

  • 코드 보기

자 이제 본격적으로 소스 코드를 살펴보자.

 

메인 함수 안에는 아무것도 없고 처음 보는 QCoreApplication 하나가 선언되어 있다. 한번 실행 해보자. 실행은 좌측 하단의 녹색 버튼을 클릭하면 된다.

 

자 기대했던것이 나왔는가? 기대했던 Hello World 글자는? 아싸 소스 코드를 보면 알겠지만 Hello World를 출력하는 코드가 없다. QCoreApplication은 Qt 기반의 프로그램을 시작하도록 해주는 객체이고 현재 프로그램은  a.exec() 함수 안에 머물러 있다. 자 강제로 종료하고 코드를 입력해보자.

 

C++방식으로 Hello World를 출력하도록 하고 실행하면 Hello World를 볼 수 있다.  이제 다른 방식은 어떨까. Qt의 기능을 이용할 수 있으면 좋겠는데.  있다. qDebug 를 이용하는 것이다. 

 

Qt 에서 제공하는 qDebug 기능을 이용하면 Qt가 내부적으로 Console에 출력을 시켜준다. 해당 키워드에 대해 좀더 알고 싶으면 qDebug 에 마우스를 대고 F1키를 누르면 친절할 설명이 나온다.  qDebug외에서 qInfo, qWarn, qFatal, qError 등이 있다. 나는 잘 쓰지 않지만 이렇게 레벨을 걸고 출력을 하도록 한뒤 일정 레벨만 실제 콘솔에 출력하도록 세분화 할 수는 장점이 있다. 

 

이제[ 코드를 좀더 자세히 보자. 전통적인 c++ 프로그램의 main 함수가 호출되면 콘솔창이 생성되고 키입력과 같은 코드를 넣지 않으면 그대로 프로그램이 종료된다. 프로그램을 실행하면 텍스트가 출력되고 Console 창이 그대로 떠 있다. 어떻게 된 걸까? 비밀은 QCoreApplication이 선언되어 있고 exec 함수를 호출함에 의해 가능해진다. QCoreApplication에 마우스를 클릭하고  F1을 눌러 설명을 보자. 

 

이런 설명을 볼수 있다. 즉 UI가 없이 Qt 애플리케이션의 이벤트 루프를 제공한다라고 되어 있다. 좀더 자세히 보기 위해 More를 클릭해 보자.

QCoreApplication은 이벤트 루프를 유지하고 그 이벤트 루프는 exec 함수를 호출하면서 시작된다. 이벤트 루프를 종료하기 위해선 quit 와 같은 함수를 호출했을때 가능하다라고 되어있지만. console 환경에서는 창을 강제 종료해야만 종료할 수 있다.  설명을 보면 signal / slot 이란 용어가 나온다. Qt 메커니즘의 가장 중요한 개념인 Sinal / Slot에 대해 알아보자.

+ Recent posts