필자가 H사에 입사하고 얼마되지 않아 QT Application을 만들기 시작 했는데.. 최근에도 시켜서 만들게 되었다. 그래서 작은것 부터 기록을 남기려한다.
개인적으로 생각하건데, QT의 장점은 주요 운영체제를 가리지 않고 모두 사용할 수 있다는 점이고, 단점은 Signal() Slot() 방식의 인터럽트 처리와 생각보다 화려하지 않은 GUI, 완성도 없는 개발도구, 그래서 일까? 초기 QT를 통해 애플리케이션을 만들 때는 항상 텍스트 에디터에서 프로그래밍을 하였다. 그 다음 외국계 K사의 HMI를 할때까지만 해도 그랬었는데, I사에 들어가면서 부터 조금 편리해지기 시작해서, 지금은 더 편리하게 개발할 수 있는 IDE를 제공하고 있어 손쉽게 프로그램을 개발할 수 있다.
필자가 다루려 하는 내용은 단순 프로그래밍 방법에 대한 이야기이다. 예전에는 개발하는 방법이 나누어져 있지 않았지만 지금은 개발하는 방식이 다르며, GUI 난이도에 따라 충분히 선택적으로 사용할 수 있어 보인다. 물론, 공부를 위해서라면 필자는 예전 방식을 추천하지만, 실무에서는 GUI 객체를 리소스에서 바로 가져다 쓰는 현재의 개발 방식이 GUI 설계와 구성에 따른 속도와 개발 편의성 면에서 우수하다. 어떤 방식을 사용할 지는 독자가 선택하되, 시작은 고전적 방식으로 시작하여 기본 위젯을 몇개 만들고 난 다음 GUI객체를 가져다 간단한 프로그램을 만들어 보도록 하겠다.
그 첫 시간으로... 오늘은 Ubuntu에 QT를 설치하는 것 부터 시작하자.
0. 요구사항
- Ubuntu가 설치된 호스트(PC, 가상머신)
- Ubuntu는 인터넷 연결이 가능해야 함.
1. QT 설치 방법 결정
QT는 소스를 받아 컴파일 해서 설치하는 방법과, 우분투의 경우 기본패키지를 바로 설치하여 사용하는 방법이 있다. 본 내용은 기본패키지를 토대로 사용하는 즉, 애플리케이션 개발 방법에 대한 부분만 고려하고 있으므로, 소스를 직접 빌드하여 설치하는 방법은 다른 게시물을 통해서 이야기 하도록 하겠다.
1.1. 시스템에 따른 설치방법
리눅스 또는 임베디드 리눅스에서 QT를 설치하는 방법은 다음과같다.
- 일반적인 PC(Host)에 QT를 설치하는 방법
-> Linux Host(PC)의 경우 설치패키지를 이용해서 설치한다. 특히 우분투의 경우 디폴트 설정은 간단
-> 소스를 받아 직접 컴파일하여 설치
- 임베디드 시스템의 경우
-> 사용하는 임베디드 시스템이 데비안 또는 우분투를 이용한다면 apt 명령 등으로 디폴트 버전 설치가 가능
-> 오픈임베디드 리눅스를 사용하는 경우라면 yocto에서 패키지 추가, 그 이외에는 QT 소스를 다운로드 받아 컴파일
1.2. 프로그래밍 방법
- 일반적인 PC(Host)
-> QT 개발도구를 이용하여 소스를 작성하고 컴파일하여 실행파일 생성.
-> 텍스트에디터(Vim 또는 Nano)를 이용하여 작성후 프로젝트 파일을 만들고 QT 컴파일하여 실행파일 생성.
- 임베디드 시스템
-> 호스트 PC에서 Q소스를 작성하고 크로스컴파일 하여 실행파일 생성, 생성된 파일을 장치로 전송
-> Ubuntu를 사용하는 장치라면 소스파일을 작성후 보드의 네이티브 컴파일러를 이용하여 빌드하는 방법.
현재로서는 지금 이야기한 내용은 당장은 필요 없고, Ubuntu를 사용하는 PC(호스트)에 우분투 디폴트 버전 QT를
설치하고 개발툴도 설치하여 하나하나씩 진행해보자.
QT의 장점인 이식성(호환성)으로 인해 소스코드는 거의 동일하니, QT프로그래밍을 알아가고자 하는 현 시점에서 하드웨어적인 요소는 의미가 없을 것으로 본다.
2. QT 설치
Ubuntu에서 디폴트 버전의 QT를 설치하는 것은 단순하다.
(1) 필수 개발환경 설치
- 저장소 업데이트
$ sudo apt-get update |
- 필수 개발환경 패키지 설치
$ sudo apt-get install build-essential |
(2) QT Creator (IDE)
QT Creator는 QT 개발환경이다. 예전에는 QT Designer로 GUI를 설계하고, Qmake를 통해서 소스를 생성한다음 텍스트 에디터로 작업을 했지만 그러한 불편함은 QT Creator 이후 사라졌다.
$ sudo apt-get install qtcreator |
(3) QT 디폴트 라이브러리 다운로드
$ sudo apt-get install qt5-default |
(4) 기타 QT관련 패키지 다운로드
관련 문서와 예제등이 포함된다. 아래의 패키지는 설치하지 않아도 사용상 문제가 없으니 필요시 설치한다.
$ sudo apt-get install qt5-doc qt5-doc-html qtbase5-doc-html qtbase5-example |
3. 설치 확인
3.1. QT Creator설치 확인
Ubuntu의 메뉴 버튼을 클릭하여 검색어 입력란에 qt를 입력하면 다음과 같이 설치된 QT 관련 앱이 표시된다. 자주 사용할 예정이니 Qt Creator 아이콘에서 마우스 우측클릭후 Add to Favorites로 체크해둔다.
다음은 Qt Crator를 실행시켜보자. 아래의 그림은 QT Creator의 Welcome 화면이다.
- 상단의 메뉴에서 프로젝트를 생성하고 디버깅할 수 있다.
- Projects, Examples, Tutorials 항목버튼을 클릭하여 예제나 투토리얼을 배울수 있다.
- 화면 좌측의 프로그램 메뉴는 소스를 작성하고 빌드하거나 디버깅하는데 이용되는 기능들이다.
- 화면 하단부의 각 탭 요소들은 빌드나 실행시 발생되는 문제, 상태에 대한 모니터링을 가능하게 해주는 항목이다.
각 항목에 대해서는 코딩 도중에 설명하도록 하겠다.
3.2. 컴파일러 확인
라즈베리파이에 QT를 설치하거나, Windows등에 QT를 설치할 경우 설치 이외에도 컴파일러에 대한 정보등을 설정해주어야 한다. 우분투 기본 패키지를 설치한 경우에는 딱히 설정할게 없다.
(1) Hello World 예제 작성
- 프로젝트 템플릿 결정
[File] > [New File or Project] > [ Projects(Application) > Qt Widgets Application ] > [Choose]
- 프로젝트 이름 및 위치 설정
특별히 다른디렉터리를 지정할 예정이 아니라면 이름만 적어주고 넘어가자.
- 빌드시스템 설정
qmake로 지정한다.
- 테스트 프로그램이니 클래스 정보는 그냥 있는데로 쓰도록 하겠다.
생각해보면 간단한 프로그램 만들때는 클래스 정보를 그냥 그대로 하고 썼었던거 같다. 필자 뿐만 아니라 다른 개발자분들도 말이다.
- 특정 언어 지정
특정 언어를 추가하고 싶다면 언어와 관련 문자파일을 추가하겠지만, 영어만 쓸거면 그냥 진행한다.
- 개발도구 설정
컴파일러 설정 부분이다. 크로스 컴파일러를 사용하는 경우 추가하면 어래에 선택할 수 있도록 표시된다. 앞서 언급했듯 우리는 프로그래밍에 촛점을 맞추고 있으므로 그냥 진행한다.
- 프로젝트 매니지먼트
추가할 서브 프로젝트가 있거나, 버전컨트롤이 있는경우 설정한다. 지금당장 우리한테 필요한 항목은 아닌듯 하니, Finish를 눌러 프로젝트 생성을 마친다.
** Note
프로젝트가 생성되고 난다음 경고메시지가 출력되면 다음과 같이 플러그인 설정에서 Clang 관련 항목들의 체크를 풀어주고 Close를 눌러서 닫는다.
Help > About Plug-in >
추가적으로 Clang code 모듈은 QT 사이트에서 다음과 같이 설명하고 있다.
We decided that it is time to turn the Clang code model on by default. It made huge progress during the last releases, and at some point we need to do this switch. The built-in model cannot keep up with the developments in the C++ language, nor with the development of the available tooling around it. We nowadays regularly close bug reports with the comment “works with Clang code model”. Also, the Clang code model provides much better information about issues in code without going through the edit-compile-analyze cycle explicitly. Please also have a look at Nikolai’s blog post on the Clang code model and the history of C/C++ support in Qt Creator. There can be situations where the built-in model still works better for you than the Clang code model, and you continue to have the option to use it instead, by disabling the ClangCodeModel plugin. The global symbol index is also still created with the built-in model. |
설정이 완료되었으면 Close를 눌러서 Plug-in 다이얼로그를 닫고, QT Creator를 재 시작하여, 기존에 생성한 helloworld 프로젝트를 열어준다. 그러면 오류가 출력되지 않는 것을 확인할 수 있다.
(2) 소스코드 수정
프로젝트를 클릭해서 source에서 mainwindow.cpp 파을을 더블클릭하여 소스를 확인한다. 기본적으로 생성된 코드의 include에 <QMessageBox>를 추가하고, Mainwindow생성자에 QMessageBox를 하나 만들어서 Hello World라는 문자열을 넣어주고, exec()를 통해 실행한다.
QT가 정상적으로 빌드되는지만 보면 되니깐,
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
QMessageBox msg;
msg.setText("Hello World!");
msg.exec();
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
실제 추가한 화면은 아래와 같다.
(2) 실행결과
화면 좌측의 녹색 플레이버튼을 누르면, 컴파일 되고 그 다음 실행이 된다. 정상적으로 동작된다면, Hello world! 문자열이 있는 메시지 창이 표시된 다음, OK 버튼을 눌러주면 아무것도 없는 다이얼로그 가 출력된다.
보통 사용자에게 어떤 확인을 위해서 사용하는 MessageBox()가 실행된다. OK를 눌러 MessageBox()를 닫아주자.
메시지 박스가 닫히고 나면, 아무것도 없는 다이얼로그가 표시된다. QT 애플리케이션을 개발할 준비가 되었으니, 개발해 보도록 하자. 물론, 필자와 함께 말이다.
# Ubuntu 20.04 QT 설치... 끝.
최근댓글