解决。有关示例,请参阅回复。
我有一个带孩子的容器。我需要删除所有孩子。这在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等编译示例。
答案 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));