В чем разница между gtk_box_pack_start и gtk_container_add? - PullRequest
3 голосов
/ 01 мая 2010

Мне кажется, что обе функции можно использовать для добавления некоторого виджета в контейнер.

Какая разница?

Ответы [ 4 ]

3 голосов
/ 01 мая 2010

gtk_pack_start дает вам больше контроля над тем, как дочерним виджетам выделяется пространство. Вы можете контролировать, будут ли дочерние виджеты «расширяться» (выделять какое-либо дополнительное пространство), «заполнять» (использовать все выделенное пространство или только минимальное пространство, запрошенное ими) и объем заполнения, предоставляемого дочернему элементу. Таким образом, если ваш контейнер имеет идентификатор GtkBox, gtk_box_pack_start / gtk_box_pack_end предпочтительнее, так как gtk_container_add будет работать, но использовать значения по умолчанию, которые в большинстве случаев не оптимальны.

2 голосов
/ 01 мая 2010

На GtkBox следующий псевдокод эквивалентен:

gtk_container_add(box, widget)
gtk_box_pack_start(box, widget, default_expand, default_expand, 0)

http://git.gnome.org/browse/gtk+/tree/gtk/gtkbox.c#n1665

2 голосов
/ 01 мая 2010

GtkBox находится ниже иерархии объектов, чем GtkContainer, то есть GtkBox добавляет понятие упаковки в GtkContainer, а GtkContainer добавляет возможность для GtkWidgets содержать другие GtkWidgets.

Короче говоря, GtkBox дает вам больше контроля над компоновкой содержащихся виджетов.

Так что, если вам нужно больше контроля, используйте gtk_box_pack_start для упаковки виджетов, например, добавив несколько выровненных комбинированных полей в hbox, в противном случае используйте gtk_container_add, например, добавив фрейм в окно.

http://library.gnome.org/devel/gtk/stable/GtkContainer.html#GtkContainer.description

http://library.gnome.org/devel/gtk/stable/GtkBox.html#GtkBox.description

1 голос
/ 18 октября 2014

gtk_container добавляет виджеты в контейнер (кстати, многие виджеты могут быть контейнерами), а gtk_box_pack_start используется для упаковки виджетов в некоторые виртуальные объекты, называемые ящиками, которые также являются виджетами. Добавление просто помещает их в контейнер в соответствии с некоторыми предопределенными правилами, где, как при упаковке, вы говорите, как добавить виджеты, а затем добавить эти упорядоченные виджеты в контейнер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...