Rust GUI库Slint初探(〇):创建一个窗口,解决缺少Qt5依赖问题

前期我们探索过Rust的GUI库egui,当前egui库与其GUI框架eframe库都在0.24.1版本,相对来说还不甚成熟。egui/eframe当前更多地还只能用作开发小工具或玩具级应用。其没有回调函数的特性适合完全没有过GUI开发经验的开发者快速掌握并写出自己的界面程序。但对于真正的成熟应用需求,我们还需要更为强大的Rust GUI库。
Slint是一个跨平台的GUI库,可以在PC、嵌入式、Web上部署应用。其核心开发成员有前Qt员工,并且授权模式也和Qt类似,具有GPLv3以及商业许可证两种许可。对于这种有商业应用目的的库来说,可以对其发展速度、可用性与成熟性抱有期待。目前Slint已经更新到1.3.2版本,功能已经较为可用。

快速上手

首先还是使用cargo工具快速构建项目:cargo new YourProjectName
然后添加依赖:cargo add slint
打开src/main.rc,编写第一个Slint示例程序:

fn main() {
    MainWindow::new().unwrap().run().unwrap();
}

slint::slint! {
    export component MainWindow inherits Window {
        Text {
            text: "hello world";
            color: green;
        }
    }
}

如果顺利的话,就能看到第一个Slint程序的界面了:
image
同时,如果我们是在VS Code当中进行开发,可以安装Slint插件,让我们在VS Code当中提前预览我们所编写的窗口界面。
image
预览界面如下:
image

解决缺少Qt5依赖的问题

如果不顺利的话,你可能已经遇到了这样一个问题:LINK : fatal error LNK1181: 无法打开输入文件“Qt5Cored.lib”
如果电脑安装过Qt5,Slint默认会使用Qt5作为Backend。如果电脑没有安装Qt5,Slint会使用Winit作为Backend,并使用FemtoVG作为Render。如果电脑曾经安装过Qt5但卸载不完全,或者是电脑安装了一些不支持的Qt版本,如Qt for Python,都有可能导致Slint判断可以使用Qt5作为Backend,但实际却找不到相应的依赖,于是造成问题。
解决的方案可以是完全卸载过往的Qt,然后重新下载安装支持的Qt版本。也可以是手动指定Backend。
比较方便的手动指定Backend的方法为,在cargo.toml中,修改[dependencies]下的slint的features。
slint = {version = "1.3.2" , default-features = false ,features = ["backend-winit","renderer-femtovg","compat-1-2"]}
首先是关闭Slint的默认features,然后手动指定"backend-winit"和"renderer-femtovg"。同时由于我们关闭了Slint的默认features,但"compat-1-2"这个feature是必要的,所以也要添加进去。
做完以上这些以后,我们就能正常编译运行我们的第一个Slint程序了。
除了以上修改features方法解决该问题还可以在build的时候修改环境变量:
SLINT_BACKEND=winit-femtovg或者是SLINT_NO_QT=1都可以解决该问题。

posted @ 2024-01-05 17:30  AbsalomT  阅读(1226)  评论(0编辑  收藏  举报