한국어
Qt
 

Mobile and Embedded QPA 플러그인과 EGLFS

makersweb 2017.11.21 22:32 조회 수 : 3928

QPA는 Qt5의 플랫폼 추상화 레이어이며 기존에있던 QWS 및 Qt 4의 플랫폼 포트를 대체하기 위한 목적으로 설계되었다. QPA는 4.8 버전에서는 실험적으로 적용되었고 Qt5에서 정식으로 지원하였다.

 

플랫폼 윈도우 시스템의 종속적인 구현을 캡슐화하여 다양한 플랫폼에 대응하기위한 것으로 윈도우 시스템 통합을 위한 QPlatformIntegration및 QPlatformWindow와 같은 클래스들이 존재한다.

 

간단히 얘기하면 Qt UI를 새로운 윈도우시스템에 이식하는 것을 유연하게 하기위한 추상화 계층인 것이다.

QPA는 플러그인 라이브러리 형태로 존재하고 Qt Application이 실행될때 로딩된다. 임베디드 리눅스 환경에서는 Application을 실행할 때 -platform 옵션을 통해 해당 플랫폼 플러그인을 선택할 수 있다. 

 

아래는 QPA를 나타내는 그림이다.

 

QPA_Architecture.png

▲QPA아키텍쳐

 

QPA 플러그인을 개발 하기 위한 문서가 많지 않아 다른 플러그인을 보고 API를 어떻게 구현하는지 확인 해야한다.

다만 테스트를 위해 Qt 5와 함께 제공되는 minimal플러그인 2개와 임베디드 리눅스 시스템에서 잠재적으로 사용할 수 있는 여러 플랫폼 플러그인들(EGLFS, LinuxFB, DirectFB, Wayland)이 있으며 이 것들은 예제로 사용할 수 있다.

 

qtbase/src/plugins/platforms/minimal/
qtbase/src/plugins/platforms/minimalegl/

 

Qt4.8에서 알려진 문제점으로는 입력과 포커스처리, Qt단위 테스트를 수행 하지 않았다.

이문제로 인한 특정 위젯(QWidget)으로 입력 이벤트가 전달 되지 않는 문제도 발생된다.

 

위에서 설명한 것처럼 QPA는 Qt4.8에서 실험적인 적용되었기 때문에 이 버전에서 QPA사용은 문제 발생의 여지가 있다는 것을 의미한다.

 

QPA에 대해 자세히 설명하는 영상이 있다.

 

EGLFS

EGLFS는위에서 얘기한 여러 플랫폼 플러그인중에 하나인데, X11 또는 Wayland와 같은 실제 윈도우시스템 없이 EGL 및 OpenGL ES 2.0을 기반으로 Qt 응용 프로그램을 실행하기 위한 플랫폼 플러그인이다.

 

Qt Quick 2 및 기본 OpenGL 응용 프로그램 외에도 소프트웨어로 렌더링 된 창 (예를들면 QWidget 기반으로 작성된)도 지원한다.

 

후자의 경우에는 위젯의 내용이 CPU를 사용하여 이미지로 렌더링 된 다음 텍스처로 업로드되고 플러그인에 의해 합성된다. 이것은 GPU가 포함 된 최신 임베디드 리눅스 장치에 권장되는 플러그인이기도하다.

 

EGLFS는 하나의 최상위 창 (QWidget 또는 QQuickView)을 전체 화면으로 만드는데, 이 창은 다른 모든 최상위 위젯 (예 : 대화 상자, 팝업 메뉴 또는 콤보 상자의 드롭 다운 등...)이 합성되는 루트 위젯 창으로 선택된다. 

 

EGLFS 기반에서 입력장치(Input)

윈도우 시스템이없는 경우 마우스, 키보드 및 터치 입력은 evdev를 통해 직접 읽거나 libinput 또는 tslib와 같은 helper라이브러리를 사용하여 직접 읽을 수 있다. 이 경우는 장치 노드 /dev/input/event*를 사용자가 읽을 수 있어야하지만 

eglfs와 linuxfb는 컴파일 된 모든 입력 처리 코드를 가지고있다.

 

libinput 사용

libinput은 입력 장치를 처리하는 라이브러리이다. libinput을 사용 가능하게하려면 Qt를 구성하고 컴파일할 때 libudev 및 libinput 용 개발 패키지(헤더파일, 라이브러리등)를 사용할 수 있어야한다.

 

아래 링크에서 참조 및 인용:

http://doc.qt.io/qt-5/embedded-linux.html

https://wiki.qt.io/Qt_Platform_Abstraction

https://wiki.qt.io/DirectFBAndQt

http://doc.qt.io/qt-5/qpa.html

 

아래표는 각 임베디드 프랫폼을 비교한 것이다. (임베디드 시스템 환경에서 유의해야 할 부분이다.)

 

 

OpenGL

Multiple Window

Single Process

Multi Process

directfb

O

O

X

eglfs

O

X

X

linuxfb

X

O

X

wayland

O

O

O

xcb

O

O

O

 

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 86001
139 QPA 플러그인과 HTML5 Backend file makersweb 2017.12.27 808
138 QML에서 Websocket 서버와 통신 file makersweb 2021.09.18 830
137 Qt로 작성된 iOS 앱에서 시리얼 통신 file makersweb 2022.04.30 855
136 Qt 6의 C++ 프로퍼티 바인딩 예제 makersweb 2021.11.01 856
135 Qt 응용프로그램에서 Lottie Animation사용 file makersweb 2021.05.30 883
134 Qt로 작성된 안드로이드 APP에 Splash Screen을 추가 file makersweb 2020.03.10 885
133 QML 에서 QR코드 생성 file makersweb 2021.08.20 893
132 QProcess 예제 (프로그램 재시작) file makersweb 2023.01.25 911
131 QML 바인딩 끊김 진단 makersweb 2020.11.08 912
130 Qt 5 코드를 Qt 6로 포팅하기 위해 도움이 되는 Clazy Framework file makersweb 2021.03.01 923
129 Qt 5.15 및 Qt 6의 출시 일정 makersweb 2020.04.09 934
128 Qt MQTT 에 대해서 file makersweb 2020.06.02 961
127 Qt기반의 서버와 클라이언트간 SOAP(Simple Object Access Protocol) file makersweb 2020.05.11 974
126 [Qt] Google Play의 향후 요구 사항을 준수하는 방법 [2] j2doll 2019.07.29 976
125 Qt 6.0의 개발 호스트 및 대상 플랫폼 makersweb 2020.09.16 977
124 Qt로 XML 파싱 : Qt 6에서 업데이트된 (Parsing XML with Qt: Updates for Qt 6) [1] j2doll 2020.01.16 979
123 Qt 6에서 QList 변경사항 makersweb 2020.10.08 981
122 Qt 하이브리드 애플리케이션(Hybrid App) 개발 file makersweb 2023.02.08 1000
121 QMake 프로젝트를 CMake 프로젝트로 변환 with qmake2cmake makersweb 2022.09.17 1011
120 QScopedPointer 소개 및 사용법 makersweb 2019.11.29 1029