照片由Mohammad Rahmani在Unsplash上拍摄
当我读到 GTK4 对 Rust 的支持时,我知道我想试试这个设置。为了让这一切变得更好,我想使用 VSCode。VSCode 只是我的一个偏好,如果您使用官方的 Gnome Builder,您可能会更轻松地编写代码,但对于本文,我将坚持使用 VSCode。此外,我们将使用 Fedora 35。我们将使用的应用程序将是一个简单的 RSS 阅读器,因此我们将其称为 GTK RSS Reader。它将使用libadwaitaGnome 开发人员所期望的 UI 框架。
本文的项目在github上,但如果你有一点 Rust 经验,我强烈建议你自己编写它,而不是仅仅克隆它。这将是一个新系列,在我撰写文章时,要点将成为链接:
- 初始设置(本文)
- 将 UI 移动到模板文件
- 将模板与应用程序捆绑在一起
- 应用程序 UI 骨架
- 重构 UI 模板
- 读取 RSS 文件
首先我们需要 VSCode、cargo、rust 和 rustfmt。我们将 VSCode 存储库添加到 dnf:
#sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
#sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft .com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
然后我们将它与 Rust 包和 GTK4 开发包一起安装:
#sudo dnf install code
#sudo dnf install cargo rust-src rustfmt
#sudo dnf install gtk4-devel libadwaita-devel
接下来我们需要创建一个新的空 Rust 项目:
#mkdir 项目
#cd 项目
#mkdir gtk-rss-reader
#cd gtk-rss-reader
#cargo init
现在我们可以在 VSCode 中打开新的 gtk-rss-reader 项目。为了更好的开发体验,我使用了两个 VSCode 扩展:Better TOML 和 Rust Analyzer。您可以从“扩展”窗格安装两者。
Cargo.toml 文件
应用程序的初始 cargo.toml
Cargo.toml 需要知道要使用的应用程序名称、版本、Rust 版本,我们需要指定libadwaita依赖项:
[包]
名称=“gtk-rss-reader”
版本=“0.1.0”
版本=“2021”[依赖项]
libadwaita = "*"
现在这已经足够了。当我们开始处理 RSS 文件时,我们将在这里填充更多的依赖项。
应用程序窗口
添加代码以创建主应用程序窗口
我们main.rs将开始构建我们的应用程序。对于本文,我只想完成初始设置,因此我将展示如何构建一个空窗口。下一次我们将更多地讨论应用程序 UI。
我们现在有两个函数:应用程序入口点main和build_ui助手。我们来看看main函数:
pub fn main() {
let application = Application::new(Some("com.example.gtk-rss-reader"), Default::default()); application.connect_activate(build_ui);
应用程序.run();
}
我们正在libadwaita使用Application::new. 我们这里使用的字符串com.example.gtk-rss-reader是 Gnome 生态系统中使用的应用程序 ID。每个应用程序都需要有一个 ID,并且格式看起来像一个倒置的 URL。我们还使用Default::default().
接下来我们在创建的应用程序上调用两个函数:connect_activate和run. 该run函数只是启动应用程序,并且该connect_activate函数注册我们的build_ui函数以在应用程序启动时执行。让我们看看build_ui:
fn build_ui(application: &Application) {
let window = ApplicationWindow::builder()
.application(application)
.title("My GTK4 RSS Reader")
.default_height(250)
.default_width(400)
.build(); 窗口.show();
}
这个函数是我们构建应用程序 UI 的地方。现在我们简单地创建应用程序窗口,为它设置标题、大小并在屏幕上显示它。我们稍后会在这里添加更多内容,但首先,让我们看看到目前为止我们做了什么。我们将在终端中使用 cargo 构建和运行应用程序。我总是使用 VSCode 提供的便捷终端(ctrl+shift+`如果你没有看到的话):
#cargo build
#cargo 运行
经过一些构建步骤,我们应该会看到全新的 GTK4libadwaita驱动的应用程序窗口:
空的应用程序窗口
有点让人失望?我们的窗口甚至没有标题栏。让我们在build_ui函数中添加它:
fn build_ui(application: &Application) {
let content = libadwaita::gtk::Box::new(Orientation::Vertical, 0);
content.append(&HeaderBar::builder()
.title_widget(&WindowTitle::new("My GTK4 RSS Reader", ""))
.build()); let window = ApplicationWindow::builder()
.application(application)
.title("My GTK4 RSS Reader")
.default_height(250)
.default_width(400)
.content(&content)
.build(); 窗口.show();
}
不要忘记更新use声明:
使用 libadwaita::{
gtk::Orientation,
prelude::{ApplicationExt, ApplicationExtManual, BoxExt, WidgetExt},
Application, ApplicationWindow, HeaderBar, WindowTitle, };
现在,如果我们构建并运行应用程序,我们将看到预期的空应用程序窗口:
最后一个带有标题栏的空窗口
最初的工作到此结束,本文也是如此。我们将进一步探索该libadwaita框架,并创建一个简单但可用的 RSS 阅读器应用程序。下次我们会将我们的 UI 代码转移到模板文件中,以提高代码的可读性和复杂性。现在,请随时评论您对本教程的体验,以便我改进它。下一篇文章见!