한국어
Qt
 

Mobile and Embedded QPA 플러그인과 EGLFS

makersweb 2017.11.21 22:32 조회 수 : 3927

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 85893
179 Qt 응용프로그램에 Web 구성 요소를 표시 with Servo file makersweb 2024.04.27 35
178 Qt Creator 에서 GitHub Copilot 사용하기 file makersweb 2024.04.13 270
177 Qbs 프로젝트를 정의하기 위해 사용되는 몇가지 중요한 아이템들 file makersweb 2019.10.13 296
176 QtQuick 애플리케이션에 Rive 애니메이션 통합 makersweb 2024.03.31 321
175 Qt 6.4에 추가될 Qt Quick 3D Physics file makersweb 2022.08.07 343
174 HTTPS URL을 연결할 때 SslHandshakeFailedError 오류 makersweb 2022.07.31 358
173 Qt Android 앱에 AdMob 배너달기 file makersweb 2021.12.04 392
172 그래픽 소프트웨어에서 디자인 내보내기 (Exporting Designs from Graphics Software) j2doll 2020.12.25 413
171 Binding 타입으로 객체 속성 간 묶기 makersweb 2022.03.04 421
170 Base64로 인코딩된 파일을 복원 makersweb 2023.08.06 441
169 VirtualKeyboard 스타일 커스터 마이징 makersweb 2022.03.13 462
168 Qt Quick Controls 2에 네이티브 데스크탑 스타일 추가 file makersweb 2020.11.23 487
167 Android 애플리케이션 서명 구성 file makersweb 2023.12.17 491
166 앱을 종료할 때 QML 바인딩 오류를 피하는 방법 makersweb 2021.08.08 498
165 하드디스크 드라이브 여유 공간 계산 file makersweb 2023.01.15 502
164 안드로이드용 Qt 6.2 makersweb 2021.10.02 504
163 성능 고려 및 제안 사항 makersweb 2022.03.07 505
162 QRhi 에 대해서 file makersweb 2023.12.29 521
161 Qt Safe Renderer 개요 file makersweb 2022.09.08 544
160 QML의 사용자 정의 Image makersweb 2023.09.17 550