后端与渲染器
在 Slint 中,后端(backend)是封装与操作系统(尤其是窗口子系统)交互的模块。 多个后端可以编译进 Slint,并在应用程序启动时在运行时选择使用其中一个。 你可以配置 Slint 不包含任何内置后端,而是通过实现 Slint 的平台抽象和窗口适配器接口来开发你自己的后端。
后端的选择方式如下:
- 开发者提供自己的后端并以编程方式设置它。
- 否则,如果设置了
SLINT_BACKEND环境变量,则由它的值来选择后端。 - 否则,按以下顺序尝试初始化各个后端:
- qt
- winit
- linuxkms
下表概述了内置后端。有关后端能力及其配置选项的更多信息,请参见各自 的子页面。
| 后端名称 | 描述 | 默认内置 |
|---|---|---|
| qt | 使用 Qt 库进行窗口系统集成、渲染和原生控件样式。 | 在 Linux 上,如果安装了 Qt |
| winit | 使用 winit 库与窗口系统交互。 | 是 |
| linuxkms | 使用 Linux 的 KMS/DRI 基础设施进行渲染。不需要窗口系统或合成器。 | 否 |
后端还负责选择渲染器。有关概述请参见渲染器一节。通过在 SLINT_BACKEND 环境变量中追加名称(用短横线分隔)来覆盖渲染器的选择。
例如,如果你想选择 winit 后端并结合 software 渲染器,请设置 SLINT_BACKEND=winit-software。
类似地,SLINT_BACKEND=linuxkms-skia 选择 linuxkms 后端,然后指示 LinuxKMS 后端使用 Skia 进行渲染。
Slint 自带不同的渲染器,它们使用不同的技术和库将你的元素场景转换为像素。 Slint 会根据你对后端的选择以及你在 Slint 编译时选择的 feature 来挑选渲染器。
使用 Node.js 时,所有渲染器都已内置在包中。
使用 Python 时,所有渲染器都已内置在包中。
Qt 渲染器
Section titled “Qt 渲染器”Qt 渲染器随 Qt 后端 一起提供,并使用 QPainter 渲染:
- 软件渲染,无 GPU 加速。
- 仅在 Qt 后端中可用。
- 可在任何地方运行,可移植性高且轻量。
- 软件渲染,无 GPU 加速。
- 支持局部渲染。
- 支持逐行渲染(仅 Rust)。
- 适用于微控制器。
- 有些特性尚未实现:
- 不支持旋转或缩放。
- 不支持
drop-shadow-*属性。 - 不支持
border-radius与clip: true组合使用。 - 不支持文本描边/轮廓。
- 文本渲染目前限于西方文字。
- 在
no_std环境中的Path元素需要启用software-renderer-pathfeature。 - 可在
no_std环境中使用,也可在 Winit 后端 和 LinuxKMS 后端 中使用。 - 公开的 Rust 和 C++ API。
FemtoVG 渲染器
Section titled “FemtoVG 渲染器”- 可移植性高。
- 使用 OpenGL 的 GPU 加速(必需)。当选择为
renderer-femtovg-wgpu时,使用 Metal、Vulkan 和 Direct3D 的 GPU 加速。 - 文本和路径渲染质量有时不够理想。
- 可在 Winit 后端 和 LinuxKMS 后端 中使用。
- 公开的 Rust API。
Vello 渲染器
Section titled “Vello 渲染器”- 通过 Vello 在 WGPU 上的计算管线,实现使用 Metal、Vulkan 和 Direct3D 的 GPU 加速。
- 实验性:它从不会被自动选中,即使它是唯一编译进来的渲染器时也是如此。
通过设置
SLINT_BACKEND=winit-vello或SLINT_BACKEND=linuxkms-vello来选择它。 - 需要支持计算着色器的 GPU。没有软件回退。
- 可在 Winit 后端 和 LinuxKMS 后端 中使用。
Skia 渲染器
Section titled “Skia 渲染器”- 使用 OpenGL、Metal、Vulkan 和 Direct3D 的精巧 GPU 加速。
- 与其他渲染器相比,磁盘占用较大。
- 可在 Winit 后端 和 LinuxKMS 后端 中使用。
- 公开的 C++ API。
Skia 故障排除
Section titled “Skia 故障排除”启用 Skia 渲染器时,你可能会遇到编译问题。以下各节记录了我们 已知的问题以及如何解决它们。
在 Windows 上编译出错,消息涉及多个源文件和未使用的链接器输入
Section titled “在 Windows 上编译出错,消息涉及多个源文件和未使用的链接器输入”你可能会看到包含来自 clang-cl 的以下错误和警告的编译错误:
clang-cl: error: cannot specify '/Foobj/src/fonts/fontmgr_win.SkFontMgr_indirect.obj' when compiling multiple source files clang-cl: warning: Hausmann/.cargo/registry/src/index.crates.io-6f17d22bba15001f/skia-bindings-0.66.0/skia: 'linker' input unused [-Wunused-command-line-argument]Skia 源代码被检出到由 Rust 包管理器 Cargo 管理的路径中。
当该路径包含空格时就会发生这个错误。默认情况下它位于 %HOMEPATH%\.cargo,
如果登录名包含空格,该路径就会包含空格。要解决这个问题,请把 CARGO_HOME
环境变量设置为一个不含空格的路径,例如 c:\cargo_home。
在 Windows 上编译出错,文件名称过长
Section titled “在 Windows 上编译出错,文件名称过长”当从源代码构建 Skia 时,你可能会看到这个错误:
GetFullPathNameA(../../../../../../../../cargo/registry/src/index.crates.io-1949cf8c6b5b557f/skia-bindings-0.99.0/skia/third_party/externals/harfbuzz/src/...): The filename or extension is too long. ninja: build stopped: subcommand failed.Skia 构建使用一个限制为 260 个字符的 Windows API 来解析编译器报告的 include 路径,
并且是相对于构建目录来解析它们。Cargo 目标目录或 CARGO_HOME 的深层路径
超出了该限制。要解决这个问题,请把两者都移动到
接近驱动器根目录的位置:将 CARGO_TARGET_DIR 环境变量设置为 c:\t,
并将 CARGO_HOME 环境变量设置为 c:\cargo_home。
为带硬件浮点支持的 ARMv7 编译时出错
Section titled “为带硬件浮点支持的 ARMv7 编译时出错”你可能会看到包含以下消息的编译错误:
Unable to generate bindings: ClangDiagnostic("/home/runner/work/slint/yocto-sdk/sysroots/cortexa15t2hf-neon-poky-linux-gnueabi/usr/include/gnu/stubs-32.h:7:11: fatal error: 'gnu/stubs-soft.h' file not found\n")Skia 构建会在多处调用 Clang,并且对影响浮点 ABI 的编译器标志
(例如 -mfloat-abi=hard)很敏感,因为它们会影响头文件查找。
要解决这个问题,请设置 BINDGEN_EXTRA_CLANG_ARGS 环境变量,使其包含与你的构建环境
传给 C++ 编译器的相同标志。
例如,如果你针对 Yocto SDK 构建,那么可以在
OECORE_TUNE_CCARGS 环境变量中找到这些标志。
在 Windows 上链接时出错
Section titled “在 Windows 上链接时出错”你可能会看到包含以下消息的编译错误:
error: linking with `link.exe` failed: exit code: 1120 | ...= note: skunicode.lib(icu.SkLoadICU.obj) : error LNK2019: unresolved external symbol __std_init_once_begin_initialize_clr referenced in function "bool __cdecl SkLoadICU(void)" (?SkLoadICU@@YA_NXZ) ... skia.lib(skia.SkNWayCanvas.obj) : error LNK2001: unresolved external symbol __std_find_trivial_8Skia 构建要求使用 Microsoft Visual Studio 2022 作为编译器。请确保安装了编译器的 最新补丁。
在 macOS 上编译出错:
Section titled “在 macOS 上编译出错:”构建失败,并且在日志输出的某处你会看到这条消息:
cargo:warning=xcrun: error: unable to lookup item 'PlatformVersion' from command line tools installationcargo:warning=xcrun: error: unable to lookup item 'PlatformVersion' in SDK '/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk'这是因为构建过程调用了 xcrun --show-sdk-platform-version 来确定 SDK 版本,而遗憾的是
Xcode 命令行工具并不支持这一点。要解决这个问题,请运行以下命令一次:
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer使用 Yocto 交叉编译时出错:
Section titled “使用 Yocto 交叉编译时出错:”构建失败,并且你在日志中看到这条消息:
error occurred: unknown target `arm-org-linux-gnueabi`这是由 cc crate 的更新与 Skia Rust 绑定使用它的方式之间的一个不幸组合造成的。
我们预计会在未来的版本中解决这个问题。在此期间,你可以通过在你的 Cargo.lock 文件中
降级 cc crate 来绕过它:
cargo update -p cc --precise 1.1.31应用程序在 Windows 上无法启动,而是立即退出
Section titled “应用程序在 Windows 上无法启动,而是立即退出”构建成功,但在 Windows 上运行 .exe 会立即终止,且没有错误消息。
这可能是由缺少 MSVC 运行时库引起的。要解决这个问题,请安装 Microsoft Visual C++ Redistributable package
© 2026 SixtyFPS GmbH