我正在尝试创建一个图像,该图像在两个维度上填充其父小部件,同时保持纵横比。在 gtk4-rs 我做了
let picture_widget = gtk::Picture::builder()
.hexpand(true)
.vexpand(true)
.halign(gtk::Align::Fill)
.valign(gtk::Align::Fill)
.keep_aspect_ratio(true)
.can_shrink(true)
.build();
但这仅填充了父级的一个维度。但是,我想溢出该维度中的父级,以便填充两个维度。
一般来说,我认为我的目标可以通过child.set_size_request(parent_width, parent_height)
. 每次父大小更改时都需要这样做。
想法1:听size_allocate
父母的信号。不起作用,因为size_allocate
信号已被删除:https ://docs.gtk.org/gtk4/migrating-3to4.html#adapt-to-gtkwidgets-size-allocation-changes
想法 2:子类化Picture
并在allocate()
. 但Picture
显然不可子类化。编译器告诉我
类型 ParentType = gtk::图片;=> 特征
IsSubclassable<FillingPicture>
未实现Picture
想法 3:子类化Widget
并Picture
在内部使用(来自https://github.com/gtk-rs/gtk4-rs/issues/393)。我不知道如何将所有函数调用链接在一起,以便Picture
实际显示。(这样做也感觉不对。如果这很容易实现,Picture
那么可能是子类化的吗?)
Picture
想法 4:从头开始重新实现整个类。似乎只是为了简单的调整大小而过度杀伤和过多的维护开销。
想法5:使用CSS属性填充父级。我尝试将width
and设置height
为 100%,但显然不允许使用相对大小。cover
也不支持 CSS 属性。
想法 6:放弃 GTK
上述想法的任何其他想法或修复?