瓦拉。如何删除GTK容器的所有子项?

时间:2016-03-25 06:56:42

标签: gtk3 vala

解决。有关示例,请参阅回复。

我有一个带孩子的容器。我需要删除所有孩子。这在C中很容易.Vala不起作用。

以下代码为集合生成错误缺少类型参数。

var a_box = new Box (Orientation.VERTICAL, 0);
// Add some children
List children = a_box.get_children();
foreach (Widget element in children) { }

我测试了此代码的20多种变体以及许多数据类型。当我没有得到丢失的类型投诉时,我最终得到的数据类型不能用作小部件,这意味着我无法销毁它。

使用Vala,而不是C或Python或其中任何一种容易的语言,如何删除容器的所有子项?

从我所看到的,获取子项的唯一方法是作为List,但在Vala中,List条目不能用于删除或销毁小部件。

在C中删除和销毁工作。我有几个基于C的应用程序同时执行这两项工作。 Vala 0.30编译器拒绝从C到Vala的每个转换,并拒绝从Valadocs等编译示例。

1 个答案:

答案 0 :(得分:6)

要更正有关缺少类型参数的错误,只需提供类型参数。 Gtk.Container.get_children()的签名表示类型为List<weak Widget>,因此请使用:

GLib.List<weak Gtk.Widget> children = container.get_children ();
foreach (Gtk.Widget element in children)
  container.remove (element);

当然,您也可以使用类型推理:

var children = container.get_children ();
foreach (Gtk.Widget element in children)
  container.remove (element);

或者甚至完全避免使用临时变量:

foreach (Gtk.Widget element in container.get_children ())
  container.remove (element);

但我能想到的最简单的方法是:

container.foreach ((element) => container.remove (element));