QNX 版 Qt 的运行时目标要求
QNX Software Systems 提供用于开发嵌入式设备的软件解决方案。这包括以非常灵活的方式创建 QNX Neutrino RTOS 启动映像。尽管 QNX 提供了多个用于操作系统映像创建的参考脚本,但您迟早需要进行修改,或者可能决定从头开始创建操作系统映像。 Qt 依赖于若干第三方组件和特定操作系统服务。因此,针对运行 Qt 的目标设备,QNX Neutrino RTOS 启动镜像必须满足以下各节中列出的要求,以确保 Qt 能按预期运行。
QNX 屏幕图形子系统
在启动任何 Qt 应用程序之前,QNX 屏幕图形子系统(也简称为“Screen”)必须处于运行状态。Screen 由一个驱动程序以及若干由 Qt 使用的实用程序和服务组成。这还包括对鼠标和键盘事件的处理。 您可以通过验证图形应用程序(如gles2-gears )能否正常启动并运行,来确保Screen 已正确配置并运行。
SDP 中大多数最新的操作系统示例构建脚本都包含有关 Screen 的所有组件和启动命令的章节。您可以将其作为参考。
Vulkan
如果您使用 Vulkan 渲染,目标镜像必须提供一个 Vulkan 加载器(libvulkan.so )以及一个实现了VK_QNX_screen_surface 扩展的Screen 图形驱动程序。有关详细信息,请参阅Vulkan 渲染 API。
IPv6 支持
Qt Network要求启用 IPv6 支持,无论实际网络使用的是 IPv4 还是 IPv6。
警告: 必须运行io-pkt-v6-hc ,而非 io-pkt-v4 。
随机设备/dev/random
Qt 要求/dev/random 存在且可正常运行。请在启动任何 Qt 应用程序之前或在系统启动期间启动它:
random -p
waitfor /dev/random系统日志记录器
QNX 提供了专为嵌入式系统特性量身定制的slog2日志框架。其主要优势在于性能远优于将日志以文本形式输出到文件。在 QNX Neutrino RTOS 上,Qt 默认使用该框架处理通过QDebug 传输的所有日志输出。slog2 服务应在系统启动时启动。slog2 还依赖于/tmp 文件夹的存在,该文件夹也需进行配置,例如:
[type=link] /tmp=/dev/shmem
display_msg "Starting slogger2..."
slogger2 -U1001:1000 &
waitfor /dev/slog2环境变量
启动 Qt 应用程序时,您需要设置一组环境变量。其中大部分实际上并非 QNX Neutrino RTOS 所特有。不过,由于了解这些变量在出现问题时能节省大量时间,因此仍在此处予以说明。
注意: setconf 和getconf 是访问 POSIX 环境变量的必要条件,特别是用于获取主机名以及日期和时间时。
Qt 运行时位置
如果您在构建 Qt 时未设置 RPATH 环境变量,则可以将 Qt 运行时组件放置在文件系统中的任意文件夹中。假设 Qt 安装位于<Qt-install-path> ,则以下环境变量应指向有效路径:
LD_LIBRARY_PATH应包含位于<Qt-install-path>/lib中的 Qt 库路径。QT_PLUGIN_PATH定义 Qt 插件的位置。应设置为<Qt-install-path>/plugins。QML2_IMPORT_PATH定义Qt Quick 插件的位置。应将其设置为<Qt-install-path>/qml。- 如果 Qt 不使用 fontconfig,则必须通过
QT_QPA_FONTDIR提供字体的路径,或者将字体放置在<Qt-install-path>/lib/fonts目录下(这是默认的字体位置)。 - 请通过
QT_QPA_QNX_DISPLAY_CONFIG检查可用屏幕/显示器的数量和顺序。
物理屏幕尺寸
Qt 需要有关已连接显示器的物理尺寸信息,以确定 DPI 值并据此设置正确的字体大小。通常,这些信息由 Screen 提供。在某些情况下,您可能会看到无效的屏幕尺寸,例如 0mmx0mm。在这种情况下,Qt 需要将环境变量QQNX_PHYSICAL_SCREEN_SIZE 设置为相应的值,以获取所需的信息。 如果 Qt 应用程序以“无法确定物理屏幕尺寸”的错误信息退出,请在启动 Qt 应用程序前按如下方式设置该变量:
export QQNX_PHYSICAL_SCREEN_SIZE=150,100以此告知 Qt,在此特定情况下屏幕的宽度为 150mm,高度为 100mm。物理屏幕尺寸以毫米 (mm) 为单位,应与最终配置中显示器的实际物理尺寸相对应。
Qt 应用程序首次启动的故障排除
QNX Neutrino RTOS 提供的灵活性唯一不足之处在于,目标设备上的运行环境可能与 Qt 的预期存在细微差异。这是 Qt 应用程序在新目标设备上无法启动的常见原因。以下几个通用环境变量有助于定位问题的根本原因:
- 将
QT_DEBUG_PLUGINS设置为1有助于查明QPA插件无法加载的原因。 - 将
LD_DEBUG设置为1有助于查看共享库的加载位置和方式。当插件因无法加载其他共享库而加载失败时,可结合使用QT_DEBUG_PLUGINS。 - 将
QT_LOGGING_TO_CONSOLE设置为stderr将强制将所有日志消息发送到 而不是slog2。这对于分析应用程序启动问题非常有用,因为您无需使用其他工具即可查看这些消息。
Qt 通常使用fontconfig 来访问系统字体。如果之前尚未创建字体缓存,则会在第一个 Qt 应用程序启动时创建。 根据具体配置情况,此过程可能耗时极长,并显著延迟应用程序的启动。若无必要,可在配置时通过 -DFEATURE_fontconfig=OFF 禁用 fontconfig。
在 QNX 平台上使用 QCursor
QNX 上默认禁用自定义光标支持。要启用该功能,请在启动 Qt 应用程序之前设置环境变量 `QT_QPA_QNX_CUSTOM_CURSOR `:
export QT_QPA_QNX_CUSTOM_CURSOR=1启用自定义光标支持后,QNX 支持更改窗口的光标形状,但您需要通过屏幕配置文件graphics.conf 部署并指定与所需形状关联的图像。更多详细信息请参阅“配置显示”小节中的 cursor-type 参数。 除默认光标外,QNX 不提供其他光标。因此,任何额外的光标图形都必须以位图格式手动提供。下表列出了graphics.conf 中针对每个Qt::CursorShape 值所使用的光标名称。
| Qt::CursorShape 值 | QNX 屏幕配置名称 |
|---|---|
| Qt::ArrowCursor | 箭头 |
| Qt::CrossCursor | cross |
| Qt::WaitCursor | wait |
| Qt::IBeamCursor | ibeam |
| Qt::PointingHandCursor | 手 |
| Qt::OpenHandCursor | 抓取 |
| Qt::ClosedHandCursor | 抓取 |
| Qt::DragMoveCursor | 移动 |
| 所有其他光标形状 | 箭头(默认) |
© 2026 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.