2 个版本
0.1.1 | 2023 年 4 月 21 日 |
---|---|
0.1.0 | 2023 年 4 月 21 日 |
#1639 in Rust 模式
每月 21 次下载
5KB
gtk_widget_macro
派生宏帮助您处理 Gtk 小部件。
工作原理
gtk_widget_macro
导出名为 GtkWidget
的派生宏。
当 GtkWidget
被添加到一个结构体中时,它为该结构体定义了一个 Struct::from_builder(>k::Builder) -> Struct
函数。
当调用此函数时,它收集结构体的所有字段,并使用每个字段的名称作为参数传递给 gtk::Builder.object(glib::gstring::IntoGStr)
。检索到的对象将被分配给相应的字段。如果未找到具有给定名称的对象,则进程会崩溃。此外,还会向结构体中添加一个与字段名称完全相同的新方法。该方法将返回该对象的引用。
此宏不受 Gtk 版本的限制。您可以使用任何您喜欢的 Gtk 版本。如果有某些版本无法正常工作,请报告一个错误。
示例
use gtk::{prelude::*, Application, ApplicationWindow, Builder, Button};
// Imports the macro.
use gtk_widget_macro::GtkWidget;
// Adds the macro to the struct.
#[derive(GtkWidget)]
struct Widgets {
button_example: Button,
window: ApplicationWindow,
}
fn build_ui(app: &Application) {
let builder = Builder::from_string(include_str!("main.ui"));
// Calls `from_builder` to construct the struct.
let widgets = Widgets::from_builder(builder);
// Retrieves the gtk::Button with object id `button_example`.
let button_example = widgets.button_example();
button_example.connect_clicked(|_| {
println!("Button clicked.");
});
// Retrieves the gtk::ApplicationWindow with object id `window`.
let window = widgets.window();
window.set_application(Some(app));
window.present(); // Needs to be changed to `show_all` if Gtk3 is used.
}
fn main() {
let app = Application::builder().application_id("org.example.Example").build();
app.connect_activate(build_ui);
app.run();
}
依赖关系
~285–740KB
~18K SLoC