add_widget_with_label(GTK_CONTAINER(vbox), "Radio 1:", radiobutton1);
add_widget_with_label(GTK_CONTAINER(vbox), "Radio 2:", radiobutton2);
add_widget_with_label(GTK_CONTAINER(vbox), "Button:", button);
g_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(button_clicked), NULL);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
На рис. 16.10 показана программа buttons.c в действии с виджетами GtkButton
Рис. 16.10
Щелкните мышью кнопку OK
, чтобы увидеть состояние разных кнопок.Данная программа — простой пример использования кнопок GtkButton
GtkToggleButton, GtkCheckButton и GtkRadioButton с помощью единственной функции gtk_toggle_button_get_active. Это одно из огромных преимуществ объектно-ориентированного подхода — поскольку вам не нужны отдельные функции get_active для каждого типа кнопки, вы можете сократить требующийся программный код.К этому моменту мы рассмотрели несколько простых виджетов GTK+, но не все виджеты представляют собой однострочные инструменты для ввода или отображения. Сложность виджетов ничем не ограничивается, и GtkTreeView
GtkWidget
+---- GtkContainer
+---- GtkTreeView
GtkTreeView
GtkTreeView можно создать сложные представления данных, смешивая текст, растровую графику и даже данные, вводимые с помощью виджетов GtkEntry, и т.д.Самый быстрый способ испытания GtkTreeView
GtkTreeView (рис. 16.11).Рис. 16.11
Семейство GtkTreeView
□ GtkTreeView
□ GtkTreeViewColumn
□ GtkCellRenderer
□ GtkTreeModel
Первые три компонента формируют так называемое
Ключевое достоинство проектного шаблона MVC заключается в возможности одновременной визуализации данных в виде разных представлений без ненужного их дублирования. Например, текстовые редакторы могут иметь две разные панели и редактировать разные фрагменты документа без хранения в памяти двух копий документа.
Шаблон MVC также очень популярен в Web-программировании, поскольку облегчает создание Web-сайтов, которые визуализируются в мобильных или WAP-обозревателях не так, как в настольных, просто за счет наличия отдельных компонентов
Мы начнем с рассмотрения компонента
GtkTreeStore содержит многоуровневые данные, например иерархию каталогов, а объект GtkListStore предназначен для простых данных.Для создания объекта GtkTreeStore
GtkWidget *store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_INT,
G_TYPE_BOOLEAN);