在Rust中继承gtk::Container时处理子类



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

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

我不知道如何继续,因为感觉孩子没有被正确注册可能导致以后的内存泄漏,因为它呈现一些方法,如get_children无用。gtk-rs有处理儿童的特殊功能吗?我找不到这方面的任何文档。但是必须有一种可能性,因为不能够处理子容器的子类几乎是无用的。

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

相关内容

  • 没有找到相关文章

最新更新