将 Gtk::Grid 重复添加到 Gtk::Box

Adding a Gtk::Grid repeatedly to a Gtk::Box

本文关键字:Gtk 添加 Box Grid      更新时间:2023-10-16

我有一个只包含一个网格的 Window 对象。我想使用 Gtk::Builder 来获取指向网格的指针,然后使用一些 Gtk::Box 的Gtk::Box->pack_end()多次将网格添加到其中(每次都有操作的内容)。

虽然每次调用该pack_end()时,我都会得到:

gtk_box_pack: assertion 'gtk_widget_get_parent (child) == NULL' failed在我的终端中,盒子里没有任何东西被添加。

我该怎么办?

谢谢

*编辑:目标:我希望将数据库表的条目放入每条记录的花哨小部件中,尽管所有记录都一个接一个地垂直显示。我想我可以在Glade中创建花哨的小部件作为窗口,并使用Gtk::Builder来获取指向它的指针。因此,在花式的Glade文件中,我有一个窗口,其中包含一个具有我的自定义外观的网格。当我尝试add pointer to the fancy *grid*时,我收到上述错误,to visible window's Box。我希望我清楚。

这是gtk_box_pack: assertion 'gtk_widget_get_parent (child) == NULL' failed的解决方案:

首先需要做的是,您应该在没有窗口的情况下绘制小部件,因此当加载构建器时,它将没有父级,因此断言成功。

虽然这里有另一点:当我将网格的第一个实例添加到 Box 时,第二个实例再次导致相同的错误。经过几次尝试和错误,我意识到在每次交互中,您应该使用 Gtk::Builder::create_from_file() 创建一个新的无父网格实例以便能够使用,并且通过这种方式工作。

如果记录数量很大,性能必须有很大的差异,但是 Gtk::Widget 的复制构造函数是私有的,直接复制是不可能的,而且由于这不是我的主要痴迷,我没有坚持解决这个"性能"问题。