клонируйте GtkWidget из Glade, чтобы его можно было повторно использовать в приложении несколько раз.

Я пишу приложение Gtk+3 на C.

Пользовательский интерфейс построен с поляной.

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

(tuxmusicstudio:27491): Gtk-WARNING **: Attempting to add a widget with type GtkBox to a container of type GtkBox, but the widget is already inside a container of type GtkBox, please use gtk_widget_reparent()

Как я могу клонировать GtkWidget, чтобы его можно было использовать снова и снова?


person ufk    schedule 22.03.2014    source источник


Ответы (1)


Вы не можете клонировать виджет как таковой. Либо поместите свой многоразовый виджет в отдельный файл Glade и загрузите его более одного раза с помощью GtkBuilder; или создайте класс для нужного виджета и создайте его экземпляр более одного раза.

person ptomato    schedule 23.03.2014
comment
действительно ли мне нужен новый экземпляр GtkBuilder всякий раз, когда я хочу повторно использовать виджет? - person ufk; 23.03.2014
comment
да. когда вы загружаете файл Glade с помощью GtkBuilder, он создает ровно один экземпляр каждого виджета, описанного в файле Glade. Однако если вы создаете класс, использующий gtk_widget_class_set_template() и друзья, это потребует дополнительной работы, но обо всем, что связано с GtkBuilder, мы позаботимся. - person ptomato; 23.03.2014