瓦拉。如何删除 GTK 容器的所有 children?
Vala. How do you delete all the children of a GTK container?
已解决。示例见回复。
我有一个装有 children 的容器。我需要删除所有 children。这在 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 或任何一种容易做到这一点的语言,如何删除容器的所有 children?
据我所知,获得 children 的唯一方法是作为列表,但在 Vala 中,列表条目不能用于删除或销毁小部件。
在 C 中删除和销毁工作。我有几个基于 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));
已解决。示例见回复。
我有一个装有 children 的容器。我需要删除所有 children。这在 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 或任何一种容易做到这一点的语言,如何删除容器的所有 children?
据我所知,获得 children 的唯一方法是作为列表,但在 Vala 中,列表条目不能用于删除或销毁小部件。
在 C 中删除和销毁工作。我有几个基于 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));