0

每当我尝试调用该show_all()函数时,我的 Gtk-rs 应用程序就会崩溃。

在一个简单的应用程序窗口中,我添加了一个标题栏和一个标签。如果我在不添加标题栏的情况下进行编译,则窗口将正常工作并按预期显示标签。但是,如果我添加标题栏,窗口就会崩溃。

use gio::prelude::*;
use gtk::{
    prelude::*,
    HeaderBarExt,
    GtkWindowExt
};

fn gen_header_bar(subtitle: Option<String>) -> gtk::HeaderBar {
    let header_bar = gtk::HeaderBar::new();
    header_bar.set_title(Some(crate::consts::APP_NAME));
    header_bar.set_show_close_button(true);
    match subtitle {
        Some(subtitle) => {
                header_bar.set_subtitle(Some(&subtitle));
            },
        _ => {
        }
    }
    header_bar
}


pub fn build_application_window() -> Result<(), Box<dyn std::error::Error>> {
    let application = gtk::Application::new(
        Some(crate::consts::APP_ID),
        gio::ApplicationFlags::FLAGS_NONE,
    )?;

    application.connect_activate(move |app| {
        let window = gtk::ApplicationWindow::new(app);
        window.set_title(crate::consts::APP_NAME);
        window.set_default_size(32 * 10, 200); // golden ratio
        window.set_position(gtk::WindowPosition::Center);
        let header_bar = gen_header_bar(None);
        window.set_titlebar(Some(&header_bar));
        window.add(&{
            let label = gtk::Label::new(Some("Welcome!"));
            label
        });  
        window.show_all(); // crashes here
    });

    application.run(&std::env::args().collect::<Vec<_>>());

    Ok(())
}

这是什么原因造成的?

4

0 回答 0