Slint 使用 Qt 后端构建时怎么配置 qmake 与 Qt 库环境变量?
【免费下载链接】slintSlint is an open-source declarative GUI toolkit to build native user interfaces for Rust, C++, JavaScript, or Python apps.项目地址: https://gitcode.com/GitHub_Trending/sl/slint
如果你构建 Slint 应用时想要 Qt 后端(只有它提供native样式的原生控件实现),Slint 的构建过程需要在构建时找到qmake,在运行应用时找到 Qt 的动态库。找不到的表现是构建期出现 "Could not find a Qt installation" 警告、Qt 后端不可用,或运行期报libQt5Core.so.5之类的库找不到错误。这篇文章给出 Slint 官方文档中对应各平台的配置方法:如何把qmake提供给构建系统,以及如何设置LD_LIBRARY_PATH、DYLD_FRAMEWORK_PATH、PATH等 Qt 库搜索路径。
适用前提:Slint 有 GL 和 Qt 两个后端,GL 后端用femtovg和winit渲染,不依赖 Qt;只有想要native样式的原生外观控件时才需要 Qt。需要的版本是Qt >= 5.15,可以从 Qt 官方安装器或其他渠道安装。
构建时让 Slint 找到 qmake
Slint 的 Rust 构建(cargo build)以及构建本仓库时,判断逻辑是:PATH中能找到qmake就启用 Qt 后端,见 docs/building.md 中 Linux、macOS、Windows 前置条件里的一致说明("Qt will be used whenqmakeis found inPATH")。
两种提供方式,任选其一:
- 把
qmake可执行文件加入PATH。使用 Qt 官方安装器安装时,qmake通常位于 Qt 安装目录的bin子目录中,把该目录加入PATH即可。 - 设置环境变量
QMAKE,指向qmake可执行文件的完整路径。
以 Linux 为例,把 Qt 安装目录的bin加入PATH:
export PATH="$HOME/Qt/6.2.0/gcc_64/bin:$PATH"或者不用改PATH,直接指定QMAKE(路径替换为你实际的qmake位置):
export QMAKE="$HOME/Qt/6.2.0/gcc_64/bin/qmake"以上路径取自文档中 macOS 一节给出的
$HOME/Qt/6.2.0/macos/lib安装布局示例,实际目录结构随安装器和版本不同而不同,请按自己机器上的位置替换。
运行期让动态链接器找到 Qt 库
qmake只是构建期的入口;应用启动时还要能加载 Qt 的动态库。各平台对应的环境变量如下,均出自 docs/install_qt.md:
Linux
用发行版包管理器装 Qt 5.15 即可,通常还需要对应的-dev包;对按模块拆分 Qt 包的发行版,需要qtbase(提供 QtWidgets)和qtsvg(SVG 插件)。
如果运行 Slint 应用时报libQt5Core.so.5之类的库找不到错误,把包含 Qt 库的目录加入LD_LIBRARY_PATH:
export LD_LIBRARY_PATH="$HOME/Qt/6.2.0/gcc_64/lib:$LD_LIBRARY_PATH"macOS
在qmake位于PATH或已设置QMAKE的基础上,还需要设置DYLD_FRAMEWORK_PATH为 Qt 安装目录的lib目录,动态链接器才能在应用启动时找到 Qt 库。文档给出的示例路径是:
export DYLD_FRAMEWORK_PATH="$HOME/Qt/6.2.0/macos/lib"Windows
把 Qt 安装目录的bin目录加入PATH。这一处同时解决两件事:构建系统据此定位qmake,应用启动时也能在该目录找到 Qt 的 DLL。
可选分支:C++(CMake)构建下不需要手动配 qmake
如果你走的是 Slint C++ API 的 CMake 构建(见 docs/building.md "C++ API Build"),api/cpp/CMakeLists.txt 的处理方式与 cargo 构建不同:它不依赖qmake在PATH中,而是用 CMake 自己定位 Qt——通常意味着你设置CMAKE_PREFIX_PATH。相关逻辑(api/cpp/CMakeLists.txt):
- 开启 Qt 后端特性(
SLINT_FEATURE_BACKEND_QT)时,先尝试find_package(Qt6 6.2 QUIET COMPONENTS Core Widgets),找不到Qt::qmake目标再回退find_package(Qt5 5.15 QUIET COMPONENTS Core Widgets); - 找到后,CMake 会把
QMAKE环境变量设置为 CMake 定位到的Qt::qmake位置,再传给 cargo 构建; - 找不到 Qt 时,则自动为 cargo 构建注入
SLINT_NO_QT=1,即不编译 Qt 后端。
所以 CMake 构建下你只需保证CMAKE_PREFIX_PATH指向 Qt 安装位置(例如cmake -DCMAKE_PREFIX_PATH=/path/to/Qt ..),无需再手动把qmake加入PATH。C++ 集成示例 examples/cpp/README.md 中则说明:构建 Qt 示例前需确认 Qt 已安装且qmake在PATH中。
如何验证配置是否生效
构建时的判断依据是 internal/backends/qt/build.rs 中输出的cargo:warning。配置正确时不应看到以下两类警告:
完全找不到 Qt 时(build.rs):
Could not find a Qt installation. The Qt backend will not be functional.后面还会跟一行
DEP_QT_ERROR_MESSAGE的具体错误信息,可以按该提示核对PATH或QMAKE是否指对了位置。找到 Qt 但版本过低时(build.rs),Qt 版本既不以
5.15开头也不以6.开头则触发:Qt {qt_version} is not supported, you need at least Qt 5.15. The Qt backend will not be functional.这说明
qmake指向了一个旧版 Qt,需要把QMAKE/PATH指向 Qt 5.15 或 Qt 6 的安装目录。
运行期的验证是应用能正常启动:Linux 报libQt5Core.so.5找不到时按上文补LD_LIBRARY_PATH,macOS 按上文补DYLD_FRAMEWORK_PATH。
确认不用 Qt 后端时:用 SLINT_NO_QT 关闭
如果你不需要native样式、不想装 Qt,可以设置环境变量SLINT_NO_QT=1再构建 Slint:Qt 后端不会被编译,构建系统也不再尝试查找 Qt,"Qt wasn't found" 的警告随之消失(docs/install_qt.md)。CMake 构建找不到 Qt 时也是通过注入SLINT_NO_QT=1达到同样效果,两种构建方式在该开关上行为一致。
需要记住的限制:Qt >= 5.15 是硬性下限;Qt 后端只服务native样式,不装 Qt 时 Slint 仍可用其他(非原生外观的)样式构建和运行。
【免费下载链接】slintSlint is an open-source declarative GUI toolkit to build native user interfaces for Rust, C++, JavaScript, or Python apps.项目地址: https://gitcode.com/GitHub_Trending/sl/slint
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考