Используя пользовательские виджеты с поляной / Gtkbuilder

Я разрабатываю приложение с Gtk и Glade. Мое впечатление - то, что это - обычная практика для создания подкласса GtkWindow для главного окна, но я застреваю о том, как я создал бы свой подкласс из определения GtkBuilder. Кто-либо знает как?

10
задан Masterofpsi 9 June 2010 в 07:02
поделиться

3 ответа

Создание подклассов GtkWindow чаще встречается в привязках различных языков GTK, чем в обычном C. Вы не упомянули, какой язык вы использовали.

Тем не менее, способ, которым я создаю подкласс GtkWindow в C, заключается в создании содержимого окна в Glade, но не самого окна. В Glade 3 (IIRC) вы можете щелкнуть правой кнопкой мыши виджет в палитре и выбрать «Добавить виджет как верхний уровень», чтобы разместить виджет не верхнего уровня без контейнера.

Затем напишите код для вашего подкласса GtkWindow , назовем его MyAppWindow .Я не буду вдаваться в подробности в этом ответе, поскольку в документации GObject есть множество примеров. В функции инициализации ( my_app_window_init () ) загрузите файл Glade, используйте gtk_builder_get_object () , чтобы получить указатель на самый внешний виджет в файле Glade, и используйте gtk_container_add ( ) , чтобы добавить его в создаваемое вами окно. Затем используйте gtk_builder_connect_signals () как обычно.

Вы должны установить все свойства окна таким образом вручную, так как вы не можете сделать это в Glade, но в остальном я обнаружил, что это работает довольно хорошо.

7
ответ дан 4 December 2019 в 02:25
поделиться

подкласс GtkWindow не является обычной практикой.

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

gtkbuilder должен знать о вашем подклассифицированном виджете до его создания.

1
ответ дан 4 December 2019 в 02:25
поделиться

Если вы действительно хотите создать свой собственный подкласс GtkWindow, ptomato хорошо описывает основные шаги. Также можно создавать плагины для Glade, чтобы сделать доступными ваши пользовательские виджеты. Но это не очень легко и, скорее всего, не то, чем вы хотите заниматься.

Большинство приложений используют только стандартные виджеты, не создавая подклассов ни для одного из них. Затем загружая файл Glade с помощью gtkbuilder (или libglade), вам не нужно иметь специальный класс для вашего графического интерфейса (как в некоторых других инструментах RAD), вместо этого вы просто получаете набор объектов. API позволяет вам искать их по имени (и окно, по сути, является лишь одним из них). Обычный подход заключается в поиске всех виджетов, с которыми вы собираетесь взаимодействовать, и сохранении их в глобальных переменных при запуске программы. Или, если вам нужно несколько экземпляров окна, вы можете создать структуру для их хранения. Или вы можете просто искать виджеты каждый раз, когда они вам нужны. Обратите внимание, что набор объектов, которые вы получаете, полностью динамичен. Например, вы можете перемещать виджеты между разными окнами так же, как если бы вы создали графический интерфейс программно.

0
ответ дан 4 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: