我正在尝试使用gtk的Rust绑定创建一个包含多个子节点的自定义gtk容器。我从gtk::Container
和gtk::Widget
派生自定义类。问题如下:
gtk::subclass::container::ContainerImpl
(文档)只提供了一些方法来实现。这些方法包括使容器能够处理子容器所需的add
和remove
方法。我的子类使用自己的小部件矢量,由add
方法填充。实现了自定义大小协商和分配,并按预期工作。但是get_children
方法不起作用,它返回一个空向量。这是预期的,因为该方法使用的forall
和foreach
方法不知道我的自定义存储的小部件。但是这些方法是gtk::ContainerExt
的一部分,因此不能由我的子类定义(至少在没有手动实现所有相关方法的情况下)。我所遵循的教程覆盖了这些方法。
我不知道如何继续,因为感觉孩子没有被正确注册可能导致以后的内存泄漏,因为它呈现一些方法,如get_children
无用。gtk-rs有处理儿童的特殊功能吗?我找不到这方面的任何文档。但是必须有一种可能性,因为不能够处理子容器的子类几乎是无用的。
目前gtk-rs的稳定版本似乎不足以实现自定义容器,因为需要forall
和foreach
,但没有在接口中定义。这将很快修复,并且已经在gtk-rs git(源代码)中。如果你需要实现forall
(foreach
也将依赖于相同的接口),并且它在稳定版本中仍然不可用,只需在Cargo.toml
中使用gtk-rs的git-repo作为依赖源。