解决了。有关示例,请参见答复。
我有一个带 child 的容器。我需要删除所有 child 。在C语言中这很容易。Vala无法正常工作。
以下代码生成一个错误,该错误缺少用于收集的类型参数。
var a_box = new Box (Orientation.VERTICAL, 0);
// Add some children
List children = a_box.get_children();
foreach (Widget element in children) { }
我测试了该代码的二十多种变体以及许多数据类型。当我没有收到丢失的类型投诉时,最终得到的数据类型不能用作小部件,这意味着我无法销毁它。
使用Vala,而不是C或Python,或使用简单的许多语言中的任何一种,如何删除容器的所有子代?
据我所知,获取 child 的唯一方法是作为一个列表,但是在Vala中,一个列表条目不能用于删除或销毁小部件。
两者都删除和销毁了C语言中的工作。 Vala 0.30编译器拒绝了从C到Vala的所有翻译,并拒绝编译Valadocs等的示例。
最佳答案
要更正有关缺少类型参数的错误,只需提供类型参数即可。 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));
关于gtk3 - 瓦拉如何删除GTK容器的所有子代?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36215425/