我正在尝试在 Rust GTK 应用程序中弹出文件对话框。窗口子类 gtk::ApplicationWindow,但是当我尝试使用它打开对话框时出现错误
error[E0277]: the trait bound `options::imp::Options: gtk4::prelude::IsA<gtk4::Window>` is not satisfied
--> src/options/mod.rs:126:17
|
124 | let file_chooser = FileChooserDialog::new(
| ---------------------- required by a bound introduced by this call
125 | Some("Open File"),
126 | Some(self),
| ^^^^^^^^^^ the trait `gtk4::prelude::IsA<gtk4::Window>` is not implemented for `options::imp::Options`
|
= help: the following other types implement trait `gtk4::prelude::IsA<T>`:
<ATContext as gtk4::prelude::IsA<ATContext>>
<ATContext as gtk4::prelude::IsA<gtk4::glib::Object>>
<AboutDialog as gtk4::prelude::IsA<AboutDialog>>
<AboutDialog as gtk4::prelude::IsA<Accessible>>
<AboutDialog as gtk4::prelude::IsA<Buildable>>
<AboutDialog as gtk4::prelude::IsA<ConstraintTarget>>
<AboutDialog as gtk4::prelude::IsA<Native>>
<AboutDialog as gtk4::prelude::IsA<Root>>
and 1758 others
选项是一个窗口:
glib::wrapper! {
pub struct Options(ObjectSubclass<imp::Options>)
@extends gtk::Widget, gtk::Window, gtk::ApplicationWindow, @implements gio::ActionMap, gio::ActionGroup;
}
但我不确定如何说服油嘴滑舌。这通常是如何处理的?将 IsA 特性添加到 Option 是否可行?我玩过它但找不到任何可以编译的东西。一种解决方案可能是将 Options 更改为一个框,然后将其作为 Window 的子项包含在内,但我认为必须有一种方法可以做到这一点,我想学习它。
有打开 FileChooser 的示例代码,但它使用的是 Window,而不是子类。我尝试制作一个新窗口并使用它 - 它确实弹出对话框(和一个小的空白窗口,在背景中),但无法获得焦点 - 焦点保留在原始窗口,即使我尝试抓住它新窗口或对话框。 目前我改为 FileChooserNative,它可以工作(它不需要小部件),但我之前遇到过类似的问题,想更好地了解发生了什么。