## 저자멘트 : QT와 관련해서 예전에 만들어둔 문서를 요약하여 업데이트 합니다.

      QT는 리눅스 뿐만 아니라, Window, MAC, Android를 비롯한 다양한 운영체제를 지원하는 GUI 라이브러리이며 임베디드 시스템까지도 지원하고 있어 피처폰, 스마트폰 뿐만 아니라 차량의 GUI에 도 사용되어지고 있습니다. 

     

      필자는 QT에 대한 내용과 프로그래밍을 위해서 어떤 준비를 해야하는지에 대한 부분에 대해서 설명하고, 프로그래밍하는 방법에 대해서 기초적인 부분과 향후 우리가 프로그래밍 하는데 필요한 부분에 대해서만 다루려고 합니다. 참고 바랍니다.

     

      추가적으로, QT 프로그래밍의 경우에도 다양 한 책이 출판되어있으나 추천할 만한 서적이 없습니다. 그래서 대부분은 인터넷 검색을 통해서 학습하게 되므로 개발자의 노력을 다소 요구하지만, 그래도 여기저기서 많이 쓰이고 있습니다. 그리고 블로그의 게시물에는 필자의 경험에 따른 개인적인 소견이 담겨있을 수 있으므로, 현시점의 내용과 맞지 않거나 또는 제가 잘못알고 있는 부분이 있을 수 있으니 양해 부탁드립니다.

     

    ## Contents ##########################################################################

    1. Overview

    1.1. QT Installation

      Ubuntu 20.04 : QT installation - Embedder's Blog (tistory.com)

     

    1.2. QT 개요

      <본 문서>

    ####################################################################################

     

     

    1. QT 개요

      Qt는 1996년 노르웨이의 Trolltech사에서 발표한 그래픽 라이브러리로 열악했던 리눅스의 GUI에 서 화사한 GUI를 사용할 수 있도록 하였으며, PDA(현재로 치자면 폰 기능이 없는 스마트폰)에 탑재 되어 당시 Windows Pocket PC(PDA용 Windows)보다 더 미려한 GUI를 자랑하기도 하였고, 임베디 드 시스템에 탑재되어 HMI(Human-Man Interface)와 같은 하드웨어 제어용 소프트웨어로 사용되기 도 하였다. 2008년 노키아에 인수되었으며 그 후 모바일 GUI 부분에서 많은 발전이 있었지만, 노키 아가 모바일 시장에서 여러 번 고배를 마시고 Windows Mobile 계열에 집중하면서 2012년 디자이 로 인수되었다가 2014년에 The QT Company로 분사되었다

     

    1.1. 지원

    ① 데스크탑 플랫폼

        • 리눅스 Redhat Hat 계열 대부분, 데비안 계열 대부분의 32비트 또는 64비트를 지원.

        • 맥 OS MacOS 10x 계열 (QT 라이브러리 버전에 따라 일부 상이할 수 있음)

        • Windows 윈도우 7 ~ 10 32비트 및 64비트 지원

     

    ② 모바일 플랫폼 QT의 장점중 하나인 주요 모바일 플랫폼을 지원한다.

        • Android Armv7과 x86 기반의 Android 4.1부터 8 지원

        • iOS 관련 iOS 11~12, tvOS11 ~ 12, watchOS 4~5 지원

        • WinRT x86, x64, armv7 기반의 Universal Windows Plaform 10을 지원

     

    ③ 임베디드 플랫폼

        • Embedded Linux QT는 크로스 플랫폼을 지원 대부분의 리눅스가 탑재된 임베디드 시스템에서 사용이 가능.

        • QnX QnX는 국방 및 교통(자동차, 철도등)등에서 사용되는 실시간 운영체제이다.

        • VxWorks 실시간 운영체제에서 유명한 VxWorks 지원

     

        QnX와 VxWorks에서 QT를 사용하는 곳은 철도와 국방이 주요 수요처인데, 라이선스가 상당히 비싸다. 게다가 OS에

        포팅하는 과정 자체에도 비용이 들어간다. (RTOS 특성상 하드웨어 아키텍처에따라 운영체제부터 재 포팅이 필요)

     

    1.2. QT라이브러리 구조

      우리가 QT라고 부르긴 하지만, 사실상 그래픽 라이브러리이므로 엄연히는 QT 라이브러리라고 하는게... 어쨋거나 QT라이브러리의 모듈구조는 다음과 같다.

     

    1.3. QT라이선스

      QT 라이선스는 상업용 라이선스와 커뮤니티라이선스로 나뉜다. 상업용 라이선스의 관련하여 업그 레이드 및 기술지원을 받을 수 있다. 다만, 정밀한 기술지원의 경우 별도로 계약을 해야 서비스를 받을 수 있다. 커뮤니티 라이선스는 상업적 목적이 아닌 개발에 이용할 수 있다. 이러한 라이선스 관련 정책등에 관련하여서는 QT 사이트(http://qt.io)에서 확인할 할수 있다.

     

     

    2. QT Programming 개요

      우리는 지금부터 Qt를 이용하여 GUI를 구성하고 개발하는 방법에 대해서 학습하고자 한다. 그러 므로 우리가 지금 해야 될 내용은 Qt 프로그래밍을 위해서 기본적으로 알아야 될 내용들에 대해서 확인해두어야 한다.

    2.1. 위젯(Widget)

      Qt는 Widget을 이용하여 GUI 프로그래밍을 할 수 있도록 구성되어있다. widget이란 유저 인터페 이스를 만들기 위해 시각적인 요소가 조합된 것을 의미한다. 필자도 그렇고 독자들도 주로 windows 를 쓰고 있으니 포괄적으로 윈도우(window 또는 창)으로 불리는 것을 의미한다. Windows기반의 MFC나 C#에서 화 면에 GUI를 표시하기 위해서 window라 하는 것을 Qt에서는 위젯(widget)으로 명하고 있다. 이러한 위젯은 하나의 위젯으로 구성되는 것이 아니라 내부에 라벨부터 리스트등 다양한 위젯들로 구성이 될 수 있고, 하나 이상의 위젯으로 구성될 수도 있다.

     

      대표적인 위젯으로 버튼, 메뉴, 스크롤바, 메시지박스, 텍스트, 체크박스, 라디오 버튼등을 비롯하 여 특정 시간이나 날자 입력등에 특화된 위젯들도 있다. 또한 개발자들이 자신만의 독자적인 위젯이 나 다이얼로그를 만들 수 있으며, QWidget을 직접적 또는 간접적으로 상속받아 개발하게 된다.

     

     

    2.2. 레이아웃(Layout)

      레이아웃을 사용함으로서 GUI의 스타일, 방향, 화면 구성등이 변경될 경우 즉각적이며 유동성있 게 대응할 수 있으며, 다국어를 지원한다. 일반적으로 크기가 지정된 위젯에 국가별 언어로 표기하 는 경우 지정된 크기를 넘어 표기가 되지 않는 경우가 있지만 레이아웃을 이용하면 위젯의 크기를 자동으로 조절할수 있는등의 기능을 구성할 수 있다.

     

     

    2.3. 시그널(Signal)과 슬롯(Slot)

      Qt에서 위젯이 이벤트를 발생시키게 되면 Signal을 내보내게 된다. 예를들면 다이얼로그 위젯에 버튼을 생성하고 해당버튼을 눌렀을 때 clicked라는 시그널이 발생되면 개발자는 해당 이벤트의 처 리를 위해 Slot 매서드를 만들고 connect()를 이용하여 연결해주면 이벤트 처리가 완료된다.  

     

     

    2.4. 애플리케이션(Application)

      Qt를 이용하여 GUI를 개발하는 것은 어렵지 않다. 직접 코드를 타이핑하거나 또는 Qt Creator등 을 이용하여 드로그앤 드랍 방식으로 GUI를 구성하고 개발할 수 있다.  

    ① 메인 윈도우 QMainWindow

      클래스로 일반적인 애플리케이션 메인 윈도우를 위한 프레임워크를 제공한다. 표 준 위젯으로 윈도우의 상단 메뉴바, 툴바가 위치하게 되며 하든에는 스테이터스바가 위치한다. 그리 고 툴팁과 풍선도움말기능이 제공된다.

     

    ② 다이얼로그와 위저드

      GUI 애플리케이션의 목적은 사용자와 시스템간의 소통을 위해서 사용된다.  

     

    ③ 멀티스레딩과 병렬(Concurrent) 프로그래밍 Qt 애플리케이션은 멀티스레드를 이용할 수 있다. 다만, 오직 한 스레드만 유저 인터페이스의 응답을 받을 스 있으며, 그 외의 스레드는 다른 연산 또는 파일 입출력등을 위해 사용된다. 

     

    ④ 그래픽스와 멀티미디어

      QT는 2D 및 3D 그래픽을 지원한다. 이러한 그래픽 처리를 지원하기 위해서 OpenGL과 OpenGL ES를 지원하고 있다. Qt는 위젯등을 페인팅하는데 있어서 독립적인 API를 제공한다.  

     

    ⑤ 웹통합. Qt는 웹킷 브라우저 엔진과 통합되어 웹컨텐츠를 표시하고 조작하기 위해 API를 제공한다. 따라서 개발자들은 웹기반의 기능을 GUI에 통합할 수 있다.

     

    ⑥ 입출력과 네트워킹 Qt는 형식없는 텍스트와 XML, 바이터리 포맷의 읽기와 쓰기가 가능하다. 또한 Qt가 제공하는 클 래스를 이용하여 로컬영역의 파일과 FTP, HTTP상의 리모트파일까지도 다룰수 있으며, 프로세스간 통신과 소켓 기반의 네트워크를 완벽하게 지원한다.  

     

     

     

      필자가 QT를 처음알게된 것이 2003년 즈음인것으로 기억한다. 당시 PDA시장은 대부분 Windows PPC(Pocket PC)였으며, 저가형의 경우 심비안이나 잘 알려져 있지 않은 운영체제가 설치되어있었다. 그러던중 QT기반의 기기도 있었는데, QT는 라이브러리 였으며 그 라이브러리를 통해서 만든 GUI 환경이 QTopia라 불렸다. 2010년 즈음부터는 QTopia와 관련된 어떤 요청도 없었고, 버전업데이트 관련 이야기도 들어본 적이 없어서 그 뒷이야기는 잘 모르겠지만 말이다...

     

     

     

    # QT 5.x Overview... 끝.

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기