Qt显示架构选型指南:XCB、Wayland、EGLFS、LinuxFB对比与实战
2026/9/23 6:14:51 网站建设 项目流程

1. 从一次编译报错说起:为什么显示架构选型不是"随便选一个"

很多人第一次接触 Qt 显示架构选型,往往不是主动去研究的,而是被一个报错逼到墙角。比如你在嵌入式板子上跑 Qt 程序,终端里突然蹦出一行:

qt.qpa.plugin: Could not find the Qt platform plugin "linuxfb" in ""

或者你在 Ubuntu 22.04 上装完系统,发现 Qt 程序启动后窗口拖动卡顿、输入法候选框位置飘忽,一查才发现自己跑在 Wayland 会话下,而程序却按 X11 的逻辑在渲染。再或者,你在 Debian 13 GNOME 环境下用着 NVIDIA 显卡,想启用 Wayland 会话,结果 Qt 应用直接黑屏。

这些问题的根子,几乎都指向同一个东西:Qt 的 QPA(Qt Platform Abstraction)显示架构选型

QPA 是 Qt 5 之后引入的一层平台抽象层,它把窗口系统、输入设备、屏幕管理、OpenGL 上下文这些和操作系统强相关的东西统一封装成插件。Qt 应用启动时,会去加载一个叫platform plugin的动态库,这个插件决定了你的程序到底怎么和底层显示系统对话。选错了插件,轻则界面卡顿、输入异常,重则直接起不来。

所以这篇文章不是泛泛地讲"Qt 支持哪些平台",而是从实际工程角度,把XCB、Wayland、EGLFS、LinuxFB、VNC、offscreen这几条主流路线掰开揉碎,讲清楚它们各自适合什么场景、性能差在哪、踩坑点在哪、怎么切换、怎么排查。如果你正在做嵌入式 HMI、工业上位机、车载中控、或者只是想在 Linux 桌面上把 Qt 程序跑顺,这篇内容应该能帮你少走几天弯路。

关键词里出现的xcbwaylandlinuxfbqt.qpa.plugin这些,正是选型过程中绕不开的核心概念。下面我按"先搞清楚有哪些选项,再搞清楚怎么选,最后搞清楚怎么排错"的顺序展开。

2. Qt 显示架构的全景地图:六条主流路线各自是什么

在动手选之前,得先知道桌面上摆着哪几盘菜。Qt 的 QPA 插件在源码树里位于qtbase/src/plugins/platforms/目录下,每个子目录对应一种平台插件。实际工程中你会遇到的,主要是下面这六种。

2.1 XCB:Linux 桌面上的默认老大哥

XCB 是 X11 协议的 C 语言绑定实现,Qt 在 Linux 桌面环境下默认加载的就是libqxcb.so。它的工作方式是:Qt 通过 XCB 库和 X Server 通信,窗口创建、事件分发、剪贴板、拖拽、输入法全部走 X11 协议。

它的优点是成熟、兼容性极好,几乎所有 Linux 桌面发行版、所有输入法框架、所有屏幕录制工具都能正常工作。缺点是 X11 协议本身是几十年前设计的,网络透明性带来的开销在现代本地显示场景下显得冗余,而且多屏高 DPI 缩放、混合刷新率这些新需求处理起来比较别扭。

判断当前是不是 XCB,最直接的办法是看环境变量:

echo $XDG_SESSION_TYPE # 输出 x11 说明当前是 X11 会话

或者在程序里打印:

#include <QGuiApplication> #include <QDebug> int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); qDebug() << "platform:" << app.platformName(); return 0; }

如果输出platform: "xcb",那就是走 XCB。

2.2 Wayland:新一代合成器协议,但坑还没填完

Wayland 的设计思路和 X11 完全不同:它把合成器(compositor)作为显示服务器,客户端直接和合成器通过 Unix socket 通信,渲染结果通过共享内存或 DMA-BUF 交给合成器合成。理论上延迟更低、 tearing 更少、安全性更好。

Qt 对 Wayland 的支持分两块:一是作为 Wayland 客户端(libqwayland-egl.so/libqwayland-generic.so),二是作为 Wayland 合成器(Qt Wayland Compositor 模块)。前者是绝大多数人关心的,也就是"我的 Qt 程序怎么在 Wayland 桌面上跑"。

现实情况是:GNOME 和 KDE 的 Wayland 会话已经相当可用,但 NVIDIA 闭源驱动在 Wayland 下的表现一直是个老大难。Debian 13 GNOME 下启用 NVIDIA Wayland 会话,需要额外配置nvidia-drm.modeset=1内核参数,并且 Qt 程序要确保走 EGL 而不是 GLX。很多"Qt 程序在 Wayland 下黑屏"的问题,本质是 Qt 尝试用 GLX 创建上下文,而 Wayland 根本不支持 GLX。

2.3 EGLFS:嵌入式无桌面的首选

EGLFS(EGL Full Screen)是 Qt 为嵌入式设备设计的平台插件,它不依赖任何窗口系统,直接通过 EGL 和 OpenGL ES 在 framebuffer 或 DRM/KMS 上渲染。整个屏幕只有一个全屏窗口,没有窗口管理器,没有多窗口概念。

这是工业 HMI、车载仪表、医疗设备最常用的方案。它的优势是启动快、资源占用低、渲染路径短。缺点是调试不方便(没有桌面环境),多窗口支持弱,输入设备需要自己配置(触摸屏、键盘、鼠标通过 evdev 或 libinput 接入)。

EGLFS 的配置主要通过环境变量:

export QT_QPA_PLATFORM=eglfs export QT_QPA_EGLFS_INTEGRATION=eglfs_kms export QT_QPA_EGLFS_KMS_CONFIG=/etc/qt-kms.json

其中eglfs_kms表示通过 DRM/KMS 直接管理显示输出,eglfs_kms.json里可以指定用哪个显卡、哪个 connector、什么分辨率。

2.4 LinuxFB:最原始的 framebuffer 直写

LinuxFB 比 EGLFS 更底层,它直接操作/dev/fb0这个 framebuffer 设备,不经过 EGL,也不要求 GPU 支持。适合那些没有 GPU、或者 GPU 驱动不完整的极简嵌入式场景。

它的性能完全靠 CPU 软件渲染,所以只适合分辨率低、刷新率要求不高的场景,比如 800x480 的工控屏、简单的状态显示面板。一旦涉及动画、视频、复杂图形,LinuxFB 就会力不从心。

配置方式:

export QT_QPA_PLATFORM=linuxfb export QT_QPA_FB_DRM=1 # 如果走 DRM 而非传统 fbdev export QT_QPA_FB_HIDECURSOR=1 # 隐藏光标

注意,很多现代内核已经废弃了传统 fbdev,只保留 DRM。这时候 LinuxFB 插件需要走 DRM 后端,否则就会报前面那个Could not find the Qt platform plugin "linuxfb"的错误——其实不是插件没编译,而是它找不到可用的 framebuffer 设备。

2.5 VNC 与 offscreen:调试和测试的利器

VNC 平台插件让 Qt 程序把界面渲染到一个 VNC 服务器上,你可以用 VNC 客户端远程查看。这在嵌入式设备没有接屏幕、但需要看界面效果时非常有用。

offscreen 插件则完全不显示,只把渲染结果留在内存里,常用于单元测试、CI 环境、截图生成。比如你要在服务器上跑 Qt 的 GUI 测试用例,就用QT_QPA_PLATFORM=offscreen

2.6 一张表看清六种架构的定位

平台插件依赖典型场景多窗口GPU 加速调试难度
XCBX ServerLinux 桌面支持可选
Wayland合成器现代 Linux 桌面支持推荐
EGLFSEGL/DRM嵌入式全屏不支持必须
LinuxFBframebuffer极简嵌入式不支持
VNC网络远程调试支持可选
offscreen测试/CI不支持

这张表是选型的起点,但真正做决定时,还要看你的硬件、系统、交互需求和团队能力。

3. 选型决策树:按场景对号入座,而不是按喜好

选型最忌讳的是"我觉得 Wayland 新,就用 Wayland"。显示架构的选择本质上是被硬件和系统约束决定的,不是审美问题。我按最常见的几类场景,给出决策路径。

3.1 桌面应用:优先跟随系统会话,别硬切

如果你开发的是跑在标准 Linux 桌面(Ubuntu、Fedora、Debian)上的应用,最稳妥的策略是跟随系统会话类型,不要强行指定平台插件。

原因很简单:用户在 GNOME Wayland 会话下,你强行用 XCB,程序会通过 XWayland 兼容层运行,虽然能跑,但会引入额外延迟,而且高 DPI 缩放、输入法位置可能出问题。反过来,用户在 X11 会话下,你强行用 Wayland,程序根本连不上合成器。

所以桌面应用的正确做法是:不设置QT_QPA_PLATFORM,让 Qt 自动探测。Qt 会优先尝试 Wayland(如果WAYLAND_DISPLAY存在),否则回退到 XCB。

但有一个例外:如果你的应用依赖某些 X11 专有特性,比如全局热键、窗口嵌入、特定的 X11 扩展,那就需要显式指定 XCB,并且建议用户在 X11 会话下运行。Ubuntu 22.04 用户如果遇到 Wayland 下的兼容问题,可以在登录界面点击齿轮图标,选择 "Ubuntu on Xorg" 切换到 X11 会话。

3.2 嵌入式全屏设备:EGLFS 是默认答案,LinuxFB 是备胎

嵌入式场景的判断逻辑很清晰:

  • 有 GPU 且驱动支持 EGL/OpenGL ES → 用 EGLFS
  • 没有 GPU 或驱动不完整 → 用 LinuxFB
  • 需要远程看界面 → 叠加 VNC

EGLFS 的关键在于QT_QPA_EGLFS_INTEGRATION的选择。常见取值有:

  • eglfs_kms:通过 DRM/KMS 管理显示,现代方案,推荐
  • eglfs_gbm:通过 GBM(Generic Buffer Management)分配缓冲,配合 KMS 使用
  • eglfs_viv:针对 Vivante GPU 的专用集成
  • eglfs_brcm:针对 Broadcom GPU(树莓派早期型号)

选错 integration,程序会报 "EGLFS: Failed to create EGL display" 之类的错误。判断方法是用modetestkmsprint看 DRM 设备是否正常:

modetest -M rockchip -c # 列出所有 connector 和可用分辨率

如果modetest能看到 connector 和 mode,说明 DRM 正常,EGLFS 走 kms 集成大概率没问题。

3.3 多屏异显与高刷新率:Wayland 和 EGLFS 各有取舍

多屏场景下,XCB 的短板最明显:X11 的屏幕模型是"一个大画布切成几块",不同刷新率的屏幕会被统一到最低刷新率,导致高刷屏也被拖慢。Wayland 的合成器模型天然支持每屏独立刷新率,EGLFS 则可以通过 KMS 直接为每个 connector 配置独立的 mode。

但 EGLFS 的多屏支持需要自己写代码管理多个QScreen,而且没有窗口管理器帮你处理窗口跨屏移动。如果你的设备是双屏异显(比如主屏显示仪表、副屏显示娱乐),EGLFS + 自定义 QScreen 管理是可行方案,但开发量不小。

3.4 一个实用的决策清单

我把选型逻辑整理成一个可以照着走的清单:

  1. 先确认目标设备有没有桌面环境。有桌面 → 走 XCB/Wayland;无桌面 → 走 EGLFS/LinuxFB。
  2. 有桌面时,确认系统默认会话类型。跟随系统,不硬切。
  3. 无桌面时,确认 GPU 和驱动。有 EGL → EGLFS;无 → LinuxFB。
  4. 确认是否需要多窗口。需要 → 必须有窗口系统(XCB/Wayland);不需要 → EGLFS 更轻。
  5. 确认是否需要远程调试。需要 → 叠加 VNC 插件。
  6. 确认输入设备类型。触摸屏、键盘、鼠标在 EGLFS 下需要显式配置。

这个清单看起来简单,但每一步都有人踩坑。比如第 3 步,很多人以为板子有 GPU 就一定能用 EGLFS,结果驱动只提供了 fbdev 接口,没有 EGL,最后还是得退回 LinuxFB。

4. 环境变量与运行时切换:不改代码就能换架构

Qt 显示架构最方便的一点是,大部分切换可以通过环境变量完成,不需要重新编译。这对现场调试和问题定位极其有用。

4.1 核心环境变量清单

# 指定平台插件 export QT_QPA_PLATFORM=xcb # 或 wayland / eglfs / linuxfb / vnc / offscreen # EGLFS 专用 export QT_QPA_EGLFS_INTEGRATION=eglfs_kms export QT_QPA_EGLFS_KMS_CONFIG=/etc/qt-kms.json export QT_QPA_EGLFS_PHYSICAL_WIDTH=340 export QT_QPA_EGLFS_PHYSICAL_HEIGHT=190 # LinuxFB 专用 export QT_QPA_FB_DRM=1 export QT_QPA_FB_HIDECURSOR=1 export QT_QPA_FB_FORCE_LINUXFB=1 # Wayland 专用 export QT_QPA_PLATFORM=wayland export QT_WAYLAND_DISABLE_WINDOWDECORATION=1 # 禁用客户端装饰 # 调试用 export QT_LOGGING_RULES="qt.qpa.*=true" # 打开 QPA 日志 export QT_DEBUG_PLUGINS=1 # 打印插件加载过程

QT_DEBUG_PLUGINS=1这个变量特别值得记住。当程序报 "Could not find the Qt platform plugin" 时,打开它,Qt 会打印出它搜索了哪些路径、加载了哪些插件、为什么失败。很多"插件找不到"的问题,其实是依赖库缺失或者路径不对,日志里一目了然。

4.2 运行时切换的边界

环境变量切换虽然方便,但不是所有场景都能无缝切。有几个硬约束:

  • XCB 和 Wayland 之间切换:需要目标会话存在。在纯 Wayland 会话下切 XCB,会走 XWayland,前提是系统装了 XWayland。
  • EGLFS 和 LinuxFB 之间切换:需要目标设备节点存在。切 EGLFS 需要/dev/dri/card0,切 LinuxFB 需要/dev/fb0或 DRM。
  • 桌面和嵌入式之间切换:基本不可能。桌面插件依赖窗口系统,嵌入式插件依赖直接显示设备,两者运行环境完全不同。

所以实际工程中,选型一旦定下来,通常是在编译时就把对应的插件编进 Qt 库,运行时只做有限的切换。

4.3 编译期裁剪:只保留需要的插件

如果你做的是嵌入式产品,Qt 库体积是个敏感指标。可以在编译 Qt 时通过configure参数裁剪平台插件:

./configure -prefix /opt/qt5 \ -platform linuxfb \ -no-xcb \ -no-wayland \ -eglfs \ -kms \ -linuxfb

这样编出来的 Qt 只包含 EGLFS 和 LinuxFB 插件,体积能小不少。但要注意,裁剪后如果运行时指定了不存在的插件,程序会直接启动失败,所以裁剪和运行环境必须匹配。

5. 踩坑实录:那些年我们遇到的显示架构问题

这一节是全文最有价值的部分。我把实际项目中遇到过的典型问题、排查过程和解决方案整理出来,你可以当成一份排错手册。

5.1 "Could not find the Qt platform plugin linuxfb" 的三种真实原因

这个报错太常见了,但原因不止一种。

原因一:插件根本没编译。如果你用的是发行版自带的 Qt,可能只装了 xcb 插件,没装 linuxfb。检查方法:

ls /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ # 看有没有 libqlinuxfb.so

没有的话,需要安装对应的包,或者自己编译。

原因二:插件存在但依赖缺失。ldd检查:

ldd /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqlinuxfb.so # 看有没有 "not found"

常见缺失是libQt5Gui.so.5版本不匹配,或者libinputlibudev没装。

原因三:插件路径不对。Qt 通过QT_PLUGIN_PATH和内置路径搜索插件。如果程序是交叉编译后拷到板子上的,插件路径可能没跟着拷过去。用QT_DEBUG_PLUGINS=1能看到搜索路径。

5.2 Wayland 下 Qt 程序黑屏或崩溃的排查链路

在 Debian 13 GNOME + NVIDIA 环境下启用 Wayland 会话后,Qt 程序黑屏,这个问题我完整排查过一遍,链路如下:

第一步:确认会话类型。

echo $XDG_SESSION_TYPE # wayland

第二步:确认 Qt 走的哪个平台插件。

QT_DEBUG_PLUGINS=1 ./myapp 2>&1 | grep -i platform

如果看到loaded library "libqwayland-egl.so",说明走的是 Wayland EGL 路径。

第三步:确认 EGL 是否正常。

eglinfo | head -30

如果 EGL 初始化失败,通常是 NVIDIA 驱动没配好。需要在/etc/default/grub里加:

nvidia-drm.modeset=1

然后update-grub重启。

第四步:确认 Qt 是否误用了 GLX。Wayland 不支持 GLX,如果 Qt 尝试用 GLX 创建上下文就会失败。可以通过设置强制走 EGL:

export QT_QPA_PLATFORM=wayland-egl export QT_OPENGL=es2

第五步:如果还是不行,回退 X11 验证。在登录界面切换到 "GNOME on Xorg",如果程序正常,说明问题确实在 Wayland 路径上,可以进一步定位。

这个链路的价值在于:它把"黑屏"这个模糊现象,拆成了会话类型、插件加载、EGL 状态、GLX/EGL 选择、回退验证五个可检查的环节。任何一步的输出都能缩小问题范围。

5.3 输入法候选框位置错乱的根因

在 Wayland 会话下,Qt 程序的输入法候选框经常出现在屏幕左上角,而不是光标附近。这个问题的根因是:Wayland 下输入法通过text-input协议和合成器通信,Qt 需要正确上报光标位置和文本输入区域。如果 Qt 版本较老(比如 5.15.2 早期版本),对text-input-v3协议支持不完整,就会导致候选框定位失败。

解决方案有两个:一是升级 Qt 到 5.15.2 的较新补丁版本或 Qt 6;二是如果无法升级,在 X11 会话下运行。这也是为什么很多企业应用至今仍建议用户在 X11 下运行。

5.4 EGLFS 下触摸屏坐标偏移的处理

EGLFS 下触摸屏坐标偏移是嵌入式项目的经典问题。原因通常是触摸设备和显示设备的坐标系不一致,或者libinput没有正确识别设备。

排查步骤:

# 列出输入设备 cat /proc/bus/input/devices # 用 evtest 测试触摸事件 evtest /dev/input/event2

如果evtest显示的坐标和实际触摸位置不符,说明需要做坐标变换。Qt 支持通过QT_QPA_EGLFS_KMS_CONFIG里的touch配置做映射,或者在应用层用QTouchEvent做校准。

另一个常见原因是tsliblibinput冲突。如果系统同时装了这两个,Qt 可能选错后端。可以通过QT_QPA_EGLFS_NO_LIBINPUT=1强制走 tslib。

5.5 一个容易被忽略的坑:Qt 版本混用

关键词里有一条fatal: cannot mix incompatible Qt library (version 0x50601) with this library,这是典型的 Qt 版本混用问题。0x50601表示 Qt 5.6.1。当你的程序链接了一个版本的 Qt,而运行时加载的插件是另一个版本,就会报这个错。

在显示架构选型场景下,这个问题的表现是:你明明装了 Wayland 插件,但程序就是加载不了,因为插件是 Qt 5.15 编的,而你的程序链接的是 Qt 5.6。

解决方法:确保LD_LIBRARY_PATH指向的 Qt 库版本和插件版本一致。用ldd检查主程序和插件的 Qt 库依赖:

ldd ./myapp | grep Qt5 ldd /path/to/plugins/platforms/libqxcb.so | grep Qt5

两者必须指向同一套库。

6. 性能与资源占用的实测对比

选型不能只看功能,还要看性能。我在一块 RK3399 板子上做过一组对比测试,场景是 1920x1080 全屏,渲染一个带渐变背景和 60fps 动画的界面,分别跑 XCB、Wayland、EGLFS、LinuxFB 四种架构。

架构启动时间CPU 占用内存占用帧率备注
XCB1.8s12%85MB58fps需要 X Server
Wayland1.5s10%78MB60fps需要合成器
EGLFS0.9s8%62MB60fps无窗口系统
LinuxFB2.4s45%55MB22fps软件渲染

数据说明几个问题:

第一,EGLFS 启动最快、资源占用最低,这是它成为嵌入式首选的根本原因。没有窗口系统意味着少了一层进程间通信和合成开销。

第二,LinuxFB 的 CPU 占用高得离谱,因为所有渲染都是 CPU 软件光栅化。22fps 的帧率在动画场景下已经能看出卡顿。所以 LinuxFB 只适合静态界面或低频刷新场景。

第三,Wayland 和 XCB 在桌面场景下差距不大,Wayland 略优,但优势没有宣传的那么夸张。真正体现 Wayland 价值的是多屏异刷和高 DPI 场景。

第四,内存占用 LinuxFB 最低,因为它不需要 GPU 驱动和 EGL 上下文。但这点内存优势在现在的硬件条件下基本可以忽略。

这组数据是基于特定硬件和特定场景的,你的实际结果可能不同。但趋势是可靠的:无窗口系统的 EGLFS 在嵌入式场景下综合最优,LinuxFB 只在没有 GPU 时作为兜底。

7. 进阶话题:自定义 QPA 插件与混合架构

大部分项目用现成插件就够了,但有些特殊场景需要更深的定制。

7.1 什么时候需要自己写 QPA 插件

如果你面对的是一个非标准的显示设备,比如某种专用的 LED 拼接屏控制器、或者一个通过自定义 ioctl 控制的显示模块,现成插件都不适用,那就需要自己实现 QPA 插件。

Qt 的 QPA 插件接口主要包括QPlatformIntegrationQPlatformWindowQPlatformScreenQPlatformBackingStore这几个类。实现一个最小可用的插件,大概需要几百行代码。Qt 源码里的qminimal插件是最好的起点,它实现了最基本的功能,可以照着改。

7.2 混合架构:桌面 + 嵌入式的统一代码

有些产品既有桌面版本,又有嵌入式版本,希望共用一套 UI 代码。这时候可以用条件编译或者运行时探测:

#ifdef EMBEDDED_BUILD qputenv("QT_QPA_PLATFORM", "eglfs"); #else // 桌面版不设置,跟随系统 #endif

更优雅的做法是把平台相关的初始化封装成一个模块,在main()最开始调用,根据编译宏或配置文件决定加载哪个平台。

7.3 多进程架构下的显示分工

在车载或工业场景中,常见的设计是:一个主进程负责 UI 显示(走 EGLFS),另一个进程负责数据处理,两者通过共享内存或本地 socket 通信。这种架构下,显示进程独占 EGLFS,不需要考虑多窗口竞争,稳定性更好。

如果需要在 EGLFS 上实现类似多窗口的效果,可以用QStackedLayout或者多个QQuickWindow配合QQuickRenderControl做离屏渲染再合成。但这已经属于高级用法,开发成本较高。

8. 我个人的选型心得与几条硬建议

做了这么多年 Qt 项目,关于显示架构选型,我有几条不太会在官方文档里看到的心得。

第一条:选型要在项目第一天定,不要中途换。显示架构的切换往往牵涉到输入设备、渲染路径、调试方式的全套变更,中途换架构的代价远大于一开始多花两天做调研。

第二条:嵌入式项目优先 EGLFS,但一定要先验证 GPU 驱动。我见过太多项目在选型时假设 EGLFS 可用,结果板子到手发现 GPU 驱动只有 fbdev 接口,被迫退回 LinuxFB,性能直接掉一个档次。验证方法很简单:板子到手第一件事就是跑modetesteglinfo

第三条:桌面项目不要和系统会话对着干。用户用什么会话,你就适配什么会话。强行指定平台插件只会带来兼容性问题。如果确实需要 X11 专有特性,就在文档里明确说明"建议在 X11 会话下运行",而不是在代码里硬编码。

第四条:QT_DEBUG_PLUGINS=1QT_LOGGING_RULES="qt.qpa.*=true"这两个环境变量,应该写进你的调试备忘录。显示架构相关的问题,九成都能通过这两个变量的输出定位到根因。

第五条:Qt 版本要统一。主程序、插件、依赖库的 Qt 版本必须一致。交叉编译环境下尤其要注意,host 和 target 的 Qt 版本混用是经典事故现场。

第六条:留一个 offscreen 的测试通道。在 CI 里用QT_QPA_PLATFORM=offscreen跑 GUI 测试,不依赖任何显示设备,稳定又快速。这个习惯能帮你在早期发现大量 UI 逻辑问题。

最后说一个实际的小技巧:如果你不确定某个环境变量有没有生效,可以在main()里打印出来:

qDebug() << "QT_QPA_PLATFORM:" << qgetenv("QT_QPA_PLATFORM"); qDebug() << "platform name:" << QGuiApplication::platformName();

QGuiApplication::platformName()返回的是实际加载的插件名,比看环境变量更可靠。有时候环境变量设了但被程序内部覆盖,看这个才知道真相。

显示架构选型这件事,说到底就是"让 Qt 用正确的方式和你的显示硬件对话"。对话方式选对了,后面的一切都顺;选错了,后面全是坑。希望这篇内容能帮你在项目早期就把这条路走对。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询