解决了。有关示例,请参见答复。

我有一个带 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/

10-12 16:11