1

我正在尝试使用 gtk 的 Rust 绑定创建一个包含多个孩子的自定义 gtk 容器。gtk::Container我从和派生我的自定义类gtk::Widget。问题如下:

gtk::subclass::container::ContainerImpl文档)仅提供了几种实现方法。这些方法包括使容器能够处理孩子所需的add和方法。remove我的子类使用它自己的由该add方法填充的小部件向量。自定义大小协商和分配已实施并按预期工作。在大多数情况下,我都遵循本教程(针对纯 C 语言)。但是该get_children方法不起作用,它返回一个空向量。这是预期的,因为该方法使用forallforeach不知道我的自定义小部件存储的方法。但这些方法是gtk::ContainerExt因此我的子类无法定义(至少没有手动实现所有相关方法)。我遵循的教程覆盖了这些方法。

我不知道如何继续,因为感觉孩子没有正确注册可能会导致以后的内存泄漏,并且它会使某些方法变得get_children无用。gtk-rs 有处理孩子的特殊功能吗?我在这个方向上找不到任何文档。但是必须有一种可能性,因为在不能处理子类的情况下对容器进行子类化几乎是无用的。

4

1 回答 1

0

似乎当前稳定的 gtk-rs 版本不足以实现自定义容器,因为forall需要foreach但未在接口中定义。这将很快得到修复,并且已经在 gtk-rs git ( source ) 中。如果您需要实现forallforeach也将依赖于相同的接口)并且它在稳定版本中仍然不可用,只需使用 gtk-rs 的 git-repo 作为Cargo.toml.

于 2021-02-09T12:44:17.420 回答