gtk4-rs:如何将glib::Object转换为gdk::Monitor指定窗口显示器
解决方法
你可以通过**glib::Object的向下转型(downcast)**将获取到的glib::Object转换为gdk::Monitor类型,具体代码如下:
use gdk4::Monitor; // 原获取显示器列表的代码 let monitors = gdk::Display::default().unwrap().monitors(); // 获取第一个显示器并向下转型为gdk::Monitor if let Some(monitor_obj) = monitors.item(0) { match monitor_obj.downcast::<Monitor>() { Ok(monitor) => { // 这里即可将monitor传入window.set_monitor方法 window.set_monitor(Some(&monitor)); } Err(e) => eprintln!("转换显示器类型失败: {}", e), } }
补充说明
downcast::<T>()方法会尝试将glib::Object转换为指定的GObject子类类型(此处为gdk::Monitor),返回Result<T, Error>,需要处理成功或失败的情况。- 若能确定获取到的Object必然是
gdk::Monitor,也可以用更简洁的方式获取引用:if let Some(monitor) = monitors.item(0).and_then(|obj| obj.downcast_ref::<Monitor>()) { window.set_monitor(Some(monitor)); }
内容的提问来源于stack exchange,提问作者a curious student
相关产品推荐
相关产品推荐

