VxWorks용 Qt
자세한 내용은 Qt Company에 문의: https://www.qt.io/contact-us/
Qt for VxWorks 라이선스
Qt for VxWorks는 Qt for Device Creation Professional(DCP) 라이선스로 사용할 수 있습니다. 자세한 내용은 Qt 가격을 참조하십시오.
지원되는 아키텍처 및 VxWorks 릴리스
Qt 6.8은 VxWorks 24.03에서 검증되었습니다.
지원되는 아키텍처:
- ARM-v7 - BD-SL-i.MX6에서 테스트되었습니다. 사용된 BSP: fsl_imx6
- x86_64 - Intel NUC6i3SYH에서 테스트되었습니다. 사용된 BSP: itl_generic
이후 Qt 릴리스에 관심이 있으시면 Qt 전문 서비스에 문의하시기 바랍니다.
VxWorks 요구 사항
Qt Widgets 애플리케이션
- POSIX 지원
- C++17 지원
Qt Quick 2 애플리케이션
Qt Widgets 애플리케이션에 필요한 모든 기능 및 추가적으로 다음이 필요합니다:
- OpenGL ES 2.0용 GPU 장치(GPUDEV)
지원 모듈
대부분의 필수 Qt 모듈과 일부 애드온 모듈이 지원됩니다.
지원되는 필수 모듈
Qt 모듈 | 지원되는 기능 | 참고 |
---|---|---|
Qt Core | QProcess 은 지원하지 않습니다. QLocalSocket 과 QLocalServer 은 SOCK_SEQPACKET 만 지원합니다. | |
Qt GUI | ||
Qt Network | ||
Qt Qml | ||
Qt Quick | ||
Qt Quick Controls | ||
Qt Quick Dialogs | ||
Qt Quick 레이아웃 | ||
Qt Quick Test | ||
Qt Test | ||
Qt Widgets |
지원되는 애드온
Qt 애드온 | 참고 |
---|---|
Qt Concurrent | |
Qt GRPC/Protobuf | |
Qt Graphs | |
Qt Image Formats | |
Qt Multimedia | |
Qt 네이티브 인터페이스 | |
Qt OpenGL | |
Qt Quick 3D | |
Qt Quick Compiler | |
Qt Quick Effects | |
Qt SQL | |
Qt SVG | |
Qt Virtual Keyboard |
참고: 구성 도구를 실행할 때 -skip <module> 옵션을 사용하여 지원되지 않거나 사용되지 않는 모듈을 빌드에서 명시적으로 제외할 수 있습니다.
플랫폼 노트
Qt 5.0 릴리스부터 Qt는 더 이상 자체 창 시스템 구현을 포함하지 않습니다: QWS는 더 이상 지원되지 않는 플랫폼입니다. 단일 프로세스 사용 사례의 경우 Qt 플랫폼 추상화가 우수한 솔루션입니다.
VxWorks에서 사용할 수 있는 플러그인이 하나 있습니다: EGLFS입니다. 이 플러그인의 사용 가능 여부는 Qt의 구성에 따라 다릅니다.
특정 장치에 맞게 구성하기
VxWorks SDK를 설치하고 설치 관리자 및 VxWorks 이미지 빌드에 필요한 WindRiver 라이센스를 획득하여 환경을 준비합니다. https://gallery.windriver.com/portal/products}에서 적절한 설치 관리자를 검색합니다.
특정 장치에 대한 Qt를 빌드하려면 컴파일 호스트, 툴체인 및 시스루트에 대한 Qt 6 설치가 필요합니다. 또한 일부 장치에는 EGL 및 OpenGL 2.0 지원을 위한 공급업체별 적응 코드가 필요합니다.
VxWorks 이미지 요구 사항
VxWorks용 Qt는 Qt가 컴파일되고 제대로 작동하기 위해 특정 VxWorks 이미지 번들 및 구성 요소를 기본 소프트웨어에 임베드해야 합니다. 이 목록은 프로젝트의 하드웨어, 소프트웨어 및 시스템 요구 사항에 따라 달라지므로 완전한 목록은 아닙니다. 그러나 다음 표에는 특정 기능(터치스크린 지원 포함)이 작동하는 데 필수적인 것들이 포함되어 있습니다. 또한 VxWorks 버전에 따라 변경될 수 있습니다.
fsl_imx6 및 itl_generic BSP에 대한 VSB 구성 예제
Qt가 제대로 작동하려면 VSB에 다음 기능을 추가해야 합니다. 자세한 내용은 WindRiver VxWorks 설명서를 참조하십시오.
기능 | 참고 |
---|---|
DSI_DSI_KERNEL | |
IPNET_COREIP | |
IPNET_DHCPC | |
SDMMC_DEVICE | |
SDMMC_HOST | |
SDMMC_SDHC | |
SDMMC_STORAGE | |
SERVICE_UN | |
SOCKET | |
USB_EHCI | |
USB_KEYBOARD | |
USB_MOUSE | |
USB_STORAGE | |
USB_TOUCHSCREEN | |
EVDEV | |
EVDEV_LIB | |
EVDEV_TI_TSC2004_TS | |
EVDEV_EETI_EXC7200_TS | |
AUDIO | |
GPUDEV_FSLVIVGPU | fsl_imx6 특정 |
HASH | |
OPENSSL | |
RANDOM_ENTROPY_INJECT | |
IPNET_SSH | |
USER_MANAGEMENT | |
ICU | |
DRM | itl_generic 특정 |
ITLI915 | itl_generic 특정 |
LIBDRM | itl_generic 특정 |
MESA | itl_generic 특정 |
다음 구성 변수는 암시적으로 추가되므로 제거해야 합니다:
변수 | 참고 |
---|---|
_WRS_CONFIG_EVDEV_OPTIMIZED_MODE | |
_WRS_CONFIG_EVDEV_DISPLAY_POINT_TRANSLATE | |
_WRS_CONFIG_MESA_MANGLE | itl_generic specific |
구성에 다음 변수를 추가해야 합니다:
변수 | 값 | 참고 |
---|---|---|
_WRS_CONFIG_RTP_SSP | y | |
_WRS_CONFIG_RTP_STACK_PROTECTOR | y | |
_WRS_CONFIG_MESA_GPUDEV_INTEL_GEN90 | y | itl_generic 특정 |
_WRS_CONFIG_EVDEV_COMPATIBLE_MODE | y | Qt가 터치스크린에서 제대로 작동하기 위해 필요합니다. |
fsl_imx6 및 itl_generic BSP에 대한 VIP 구성 예제
자세한 내용은 WindRiver VxWorks 설명서를 참조하십시오.
번들 | 참고 |
---|---|
BUNDLE_POSIX | 이 번들은 Qt에 필요한 POSIX 관련 기능과의 호환성을 위해 필요합니다. |
BUNDLE_RTP_DEPLOY | |
BUNDLE_RTP_DEVELOP | |
BUNDLE_STANDALONE_SHELL |
컴포넌트 | 참고 |
---|---|
INCLUDE_TMP_DIR INCLUDE_RAM_DISK_FORMAT_HRFS | QTemporaryFile 을 사용하려면 이 두 컴포넌트를 포함해야 합니다. TMP_DIR_SIZE 를 적절한 값으로 설정하는 것도 고려해야 합니다. |
DRV_AUDIO_FSL_SSI | |
DRV_AUDIO_FSL_SGTL5000 | |
DRV_FSL_SDHC_CTRL | |
DRV_IMX_SDHC_CTRL | |
INCLUDE_EHCI_INIT | |
INCLUDE_FSL_IMX6Q_SABRELITE | |
DRV_MMCSTORAGE_CARD | |
DRV_SDSTORAGE_CARD | |
INCLUDE_AUDIO_LIB_CORE | |
INCLUDE_AUDIO_LIB_WAV | |
INCLUDE_CUSTOM_ENTROPY_ADD | |
INCLUDE_DEBUG_AGENT_START | |
INCLUDE_DEFAULT_TIMEZONE | |
INCLUDE_DISK_UTIL | |
INCLUDE_DOSFS | |
INCLUDE_DSAPARAM_CMD | |
INCLUDE_END | |
INCLUDE_EVDEV_LIB_CORE | |
INCLUDE_EVDEV_LIB_KBD | |
INCLUDE_EVDEV_LIB_KBD_MAP_US | |
INCLUDE_EVDEV_LIB_PTR | |
INCLUDE_EVDEV_LIB_TS | |
INCLUDE_GENDSA_CMD | |
INCLUDE_GENRSA_CMD | |
INCLUDE_GETADDRINFO | |
INCLUDE_GETNAMEINFO | |
INCLUDE_HRFS | |
INCLUDE_HRFS_ACCESS_TIMESTAMP | |
INCLUDE_HRFS_FORMAT | |
INCLUDE_HRFS_HISPEED_WRITE_MODE | |
INCLUDE_IFCONFIG | |
INCLUDE_IO_REALPATH | 이 컴포넌트는 다음에 필요한 realpath 함수를 사용할 수 있도록 하기 위해 필요합니다. QFileInfo |
INCLUDE_IPATTACH | |
INCLUDE_IPCOM_SYSLOGD_CMD | |
INCLUDE_IPCOM_SYSVAR_CMD | |
INCLUDE_IPCOM_USE_RAM_DISK | |
INCLUDE_IPCOM_USE_TIME_CMD | |
INCLUDE_IPDHCPC | |
INCLUDE_IPDNSC | |
INCLUDE_IPD_CMD | |
INCLUDE_IPFTPC | |
INCLUDE_IPFTP_CMD | |
INCLUDE_IPIFCONFIG_CMD | |
INCLUDE_IPNETSTAT_CMD | |
INCLUDE_IPNSLOOKUP_CMD | |
INCLUDE_IPPING_CMD | |
INCLUDE_IPROUTE_CMD | |
INCLUDE_IPTRACE_ROUTE_CMD | |
INCLUDE_IPWRAP_GETHOSTBYADDR | |
INCLUDE_IPWRAP_GETHOSTBYNAME | |
INCLUDE_IPWRAP_GETNAMEINFO | |
INCLUDE_IPWRAP_IFNAME | |
INCLUDE_IPWRAP_ROUTECMD | |
INCLUDE_MMAP | |
INCLUDE_PING | |
INCLUDE_PIPES | |
INCLUDE_POSIX_MAPPED_FILES | |
INCLUDE_POSIX_PIPES | |
INCLUDE_POSIX_PTHREAD_SCHEDULER | |
INCLUDE_POSIX_SHM | |
INCLUDE_RAM_DISK | |
INCLUDE_RAM_DISK_FORMAT_HRFS | |
INCLUDE_RANDOM_NUM_GEN | |
INCLUDE_ROMFS | |
INCLUDE_ROUTECMD | |
INCLUDE_SC_PIPE | |
INCLUDE_SC_POSIX_PIPE | |
INCLUDE_SD_BUS | |
INCLUDE_SECURITY | |
INCLUDE_SEC_KEY_STORE_CMD | |
INCLUDE_SHELL | |
INCLUDE_SSH | |
INCLUDE_STANDALONE_SYM_TBL | |
INCLUDE_STARTUP_SCRIPT | |
INCLUDE_TMP_DIR | |
INCLUDE_UN_COMP | |
INCLUDE_USB_GEN2_KEYBOARD | |
INCLUDE_USB_GEN2_MOUSE | |
INCLUDE_USB_GEN2_STORAGE_INIT | |
INCLUDE_USB_TOUCH_SCREEN | |
INCLUDE_USB_TOUCH_SCREEN_INIT | |
INCLUDE_USER_DATABASE | |
INCLUDE_USER_IDENTIFICATION | |
INCLUDE_VRFS | |
INCLUDE_VXBUS_SHOW | |
DRV_TOUCH_SCREEN_TI_TSC2004 | |
DRV_TOUCH_SCREEN_EETI_EXC7200 | |
INCLUDE_FBDEV_FSLIPU_0 | fsl_imx6 특정 |
INCLUDE_FBDEV_SPLASH | |
INCLUDE_GPUDEV_FSLVIV_API | fsl_imx6 특정 |
INCLUDE_GPUDEV_FSLVIV_API_INIT | fsl_imx6 특정 |
INCLUDE_GPUDEV_ITLGMC_2 | itl_generic specific |
INCLUDE_I915 | itl_generic 특정 |
INCLUDE_MESA_FBDEV | itl_generic 특정 |
INCLUDE_MESA_GPUDEV_DRI | itl_generic 특정 |
INCLUDE_MESA_GPUDEV_DRI_I965 | itl_generic specific |
다음 구성 요소는 암시적으로 추가되므로 제거해야 합니다:
Layer | 참고 |
---|---|
INCLUDE_FTP | |
INCLUDE_SHELL_SECURITY |
VIP 파라미터
다음 파라미터를 추가해야 Qt가 VxWorks에서 제대로 실행됩니다:
파라미터 | 예제 값 | 참고 |
---|---|---|
SEC_VAULT_KEY_ENCRYPTING_PW | '"vxTarget"' | 예제 값 |
UDB_STORAGE_PATH | '"/ram/vxUserDB.txt"' | 예제 값 |
UDB_HASH_KEY | '"123456789"' | 예제 값 |
UDB_HASH_KEY_LEN | 9 | 예시 값, 이전 참조 |
FSLVIV_RTP_COMMAND_BUFFER_QUEUE | 32 | 'arm' 아키텍처의 경우 |
SYS_CLK_RATE | 100 | |
RTP_PTHREAD_STACK_SIZE_DEFAULT | 262144 | qtquick3d 예제를 작동시키는 데 필요합니다. PTHREAD_STACK_SIZE_DEFAULT 환경 변수로 재정의할 수 있습니다. |
TMP_DIR_SIZE | 614400 | Qt 내부 테스트를 통과하기 위한 최소값입니다. |
NUM_FILES | 300 | |
RTP_FD_NUM_MAX | 300 | |
HRFS_DEFAULT_MAX_FILES | 300 | |
ITLGMC_FBDEV_RESOLUTION_2 | '"1024x768-32"' | HDMI를 통해 연결된 Xenarc 706TSA 터치스크린의 예제 값입니다. |
VxWorks용 Qt 6 빌드하기
호스트용 Qt 6 빌드
VxWorks용 Qt 6을 크로스 빌드할 때는 크로스 빌드와 동일한 소스 코드를 사용하는 호스트 도구를 사용하는 것이 가장 좋습니다. 이를 위해서는 먼저 호스트용 Qt 6을 빌드해야 하지만 제한된 하위 모듈 집합으로만 빌드해야 합니다:
- qtbase
- qtdeclarative
- qtquick3d
- qtshadertools
호스트용 Qt 6 빌드에 필요한 모든 전제 조건이 갖추어져 있는지 확인하십시오. 자세한 내용은 Qt 소스 빌드하기에서 확인하세요.
구성 스크립트 실행하기
호스트용 Qt 6를 구성, 빌드 및 설치하는 명령은 다음과 같습니다:
./configure \ -cmake-generator "Ninja" \ -extprefix <path/to/Qt6/host/installation/dir> \ -submodules qtbase,qtdeclarative,qtquick3d,qtshadertools \ -nomake tests \ -nomake examples \ -- \ -B <host/build/directory> cd <host/build/directory> ninja ninja install
다음 명령은 <path_to_Qt 6_host_installation_dir>
에 호스트용 Qt 6을 설치합니다.
타겟용 Qt 6 빌드하기
빌드 환경 설정
Qt 6 구성 및 빌드를 실행하기 전에 명령 프롬프트에서 VxWorks Development Shell을 열어야 합니다.
- Linux:
cd <VxWorks installation directory> ./wrenv.sh -p vxworks export WIND_CC_SYSROOT=<path to VxWorks VSB directory>
- Windows:
cd <VxWorks installation directory> wrenv -p vxworks export WIND_CC_SYSROOT=<path to VxWorks VSB directory>
사용자 지정 CMake 툴체인 파일 준비하기
BSP의 그래픽 라이브러리를 포함하려면 먼저 CMake 툴체인 파일을 생성해야 합니다. BD-SL-i.MX6 디바이스용 CMake 툴체인 파일 예시:
# Copyright (C) 2024 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause if(QT_VXWORKS_TOOLCHAIN_FILE) set(_original_toolchain_file "${QT_VXWORKS_TOOLCHAIN_FILE}") elseif(DEFINED ENV{QT_VXWORKS_TOOLCHAIN_FILE}) set(_original_toolchain_file "$ENV{QT_VXWORKS_TOOLCHAIN_FILE}") else() message(FATAL_ERROR "QT_VXWORKS_TOOLCHAIN_FILE is not set.") endif() if(NOT EXISTS "${_original_toolchain_file}") message(FATAL_ERORR "${_original_toolchain_file} doesn't exists.") endif() include("${_original_toolchain_file}") unset(_original_toolchain_file) list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES QT_VXWORKS_TOOLCHAIN_FILE) set(_common_lib_path "${CMAKE_SYSROOT}/usr/lib/common") set(EGL_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/h/public CACHE PATH "Path to EGL include directory" FORCE) set(EGL_LIBRARY ${_common_lib_path}/libgfxFslVivEGL.so CACHE PATH "Path to EGL lib" FORCE) set(GLESv2_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/h/public CACHE PATH "Path to GLES include directory" FORCE) set(GLESv2_LIBRARY ${_common_lib_path}/libgfxFslVivGLESv2.so CACHE PATH "Path to GLES lib" FORCE) set(VxWorksPlatformGraphics_DEFINES "-D_FSLVIV") set(VxWorksPlatformGraphics_LIBRARIES_PACK "${_common_lib_path}/libgfxFslVivGAL.so" "${_common_lib_path}/libgfxFslVivGLSLC.so" "${_common_lib_path}/libgfxFslVivVDK.so" "${_common_lib_path}/libxml.so" ) set(VxWorksPlatformGraphics_REQUIRED_LIBRARIES ${VxWorksPlatformGraphics_LIBRARIES_PACK} ${EGL_LIBRARY} ${GLESv2_LIBRARY} ) unset(_common_lib_path)
인텔 NUC6i3SYH용 예제:
# Copyright (C) 2024 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause if(QT_VXWORKS_TOOLCHAIN_FILE) set(_original_toolchain_file "${QT_VXWORKS_TOOLCHAIN_FILE}") elseif(DEFINED ENV{QT_VXWORKS_TOOLCHAIN_FILE}) set(_original_toolchain_file "$ENV{QT_VXWORKS_TOOLCHAIN_FILE}") else() message(FATAL_ERROR "QT_VXWORKS_TOOLCHAIN_FILE is not set.") endif() if(NOT EXISTS "${_original_toolchain_file}") message(FATAL_ERORR "${_original_toolchain_file} doesn't exists.") endif() include("${_original_toolchain_file}") unset(_original_toolchain_file) list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES QT_VXWORKS_TOOLCHAIN_FILE) set(_common_lib_path "${CMAKE_SYSROOT}/usr/lib/common") set(EGL_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/h/public CACHE PATH "Path to EGL include directory" FORCE) set(EGL_LIBRARY ${_common_lib_path}/libgfxMesaEGL.so CACHE PATH "Path to EGL lib" FORCE) set(GLESv2_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/h/public CACHE PATH "Path to GLES include directory" FORCE) set(GLESv2_LIBRARY ${_common_lib_path}/libgfxMesaGL.so CACHE PATH "Path to GLES lib" FORCE) set(VxWorksPlatformGraphics_DEFINES "-D__vxworks -D__VXWORKS") set(VxWorksPlatformGraphics_LIBRARIES_PACK "${_common_lib_path}/libgfxMesaSw.so" "${_common_lib_path}/libgfxMesa.so" "${_common_lib_path}/libgfxMesaDriI965.so" "${_common_lib_path}/libgfxLibDRM.so" "${_common_lib_path}/libxml.so" ) set(VxWorksPlatformGraphics_REQUIRED_LIBRARIES ${VxWorksPlatformGraphics_LIBRARIES_PACK} ${EGL_LIBRARY} ${GLESv2_LIBRARY} ) unset(_common_lib_path)
타겟에 대한 Qt 6 구성 실행
다음은 BD-SL-i.MX6에 대한 빌드 구성 예제입니다. 대부분의 VxWorks 보드의 경우 configure 명령은 매우 유사합니다. 기본적으로 Qt 6는 공유 라이브러리를 사용하도록 구성됩니다. Qt 6을 정적으로 빌드하려면 -static
옵션을 추가하여 구성합니다.
WIND_CC_SYSROOT} 환경 변수가 VxWorks VSB 루트 디렉터리로 설정되어 있는지 확인합니다.
./configure \ -cmake-generator "Ninja" \ -icu \ -eglfs \ -qpa eglfs \ -submodules "qtbase,qtdeclarative,qtmultimedia,qtquick3d,qtgraphs,qtimageformats,qtsvg,qtshadertools,qtvirtualkeyboard" \ -- \ -B <target/build/directory> \ -DQT_VXWORKS_TOOLCHAIN_FILE=<path/to/BDP/toolchain.cmake> \ -DFEATURE_vulkan=OFF \ -DQT_QMAKE_TARGET_MKSPEC=vxworks-clang \ -DQT_HOST_PATH=<path/to/Qt6/host/installation/dir> \ -DCMAKE_STAGING_PREFIX:PATH=<path/to/Qt6/target/installation/dir> \ -DCMAKE_TOOLCHAIN_FILE=<path/to/cmake/for/graphics/file/created/above> \
RTP가 아닌 DKM용으로 빌드하는 경우 -static
옵션을 사용하고 CMAKE_TOOLCHAIN_FILE
값을 다음과 같이 변경합니다. "$WIND_CC_SYSROOT/mk/dkm.toolchain.cmake"
섀도 빌드를 사용하여 Qt 6을 빌드하는 것이 좋습니다. 자세한 내용은 Qt 구성 옵션을 참조하십시오.
구성이 완료되면 다음 명령을 사용하여 VxWorks용 Qt 6을 빌드하고 설치합니다:
cd <host build directory> ninja ninja install
VxWorks 장치용 플랫폼 플러그인
VxWorks용 Qt는 네이티브 창 대체를 위한 EGLFS 플랫폼 플러그인을 지원합니다. EGLFS의 구성에 대한 자세한 내용을 읽어보십시오.
Qt 애플리케이션 빌드
Qt 애플리케이션을 빌드하려면 QT_VXWORKS_TOOLCHAIN_FILE을 환경 변수 또는 정의로 설정해야 합니다.
시계 Qt 데모를 빌드하는 예제입니다:
export WIND_CC_SYSROOT=<path/to/VxWorks/VSB/directory> export QT_VXWORKS_TOOLCHAIN_FILE=<path/to/the/BSP/toolchain.cmake> <path/to/Qt6/target/installation/dir>/bin/qt-cmake -G Ninja -S ~/Qt/Examples/Qt-6.8.0/demos/clocks -B <path/to/build/directory> cd <path/to/build/directory> ninja
Qt 애플리케이션 실행하기
다음 예제는 공유 라이브러리를 사용하여 Qt 6를 빌드할 때 애플리케이션을 시작하는 방법을 보여줍니다. 정적으로 빌드된 Qt 6의 경우 Qt 라이브러리에 LD_LIBRARY_PATH
환경 변수를 사용할 필요는 없지만, 이 환경 변수는 VxWorks 공유 라이브러리(예: libc 및 OpenGL ES 2.0)의 위치를 가리켜야 합니다. Qt 6 정적 라이브러리에는 필요하지 않습니다.
putenv "LD_LIBRARY_PATH=/sd0:1/lib" cd "/sd0:1" rtpSp("<Qt 6_app>", 200, 0x100000, 0, 0x01000000)
제한 사항
비디오 메모리
전용 비디오 메모리가 고정되어 있는 시스템에서는 Qt Quick 또는 QOpenGLWidget 과 같은 클래스에 기반한 Qt 응용 프로그램을 실행하기 전에 각별한 주의가 필요할 수 있습니다. 특히 이러한 애플리케이션이 고해상도(예: 풀 HD) 화면에 표시되는 경우 기본 설정이 충분하지 않을 수 있습니다. 이 경우 예기치 않은 방식으로 실패할 수 있습니다. 따라서 최소 128MB의 GPU 메모리가 있는지 확인하는 것이 좋습니다. GPU를 위해 고정된 양의 메모리가 예약되어 있지 않은 시스템에서는 문제가 되지 않습니다.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.