Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Интернет » Основы программирования в Linux - Мэтью Нейл
<< На главную

Основы программирования в Linux - Мэтью Нейл

Читать онлайн Основы программирования в Linux - Мэтью Нейл

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 286 287 288 289 290 291 292 293 294 ... 324
Перейти на страницу:

GtkTreeIter iter;

gtk_tree_store_append(store, &amp;iter, NULL);

Получив итератор, вы можете заполнять строку с помощью функции gtk_tree_store_set:

gtk_tree_store_set(store, &amp;iter,

 0, &quot;Def Leppard&quot;,

 1, 1987,

 2, TRUE, -1);

Номер столбца и данные передаются парами, которые завершаются -1. Позже вы примените тип enum для того, чтобы сделать номера столбцов более информативными.

Для того чтобы добавить ветвь к данной строке (дочернюю строку), вам нужен только итератор для дочерней строки, который вы получаете, вызвав снова функцию gtk_tree_store_append и указав на этот раз в качестве параметра строку верхнего уровня:

GtkTreeIter child;

gtk_tree_store_append(store, &amp;child, &amp;iter);

Дополнительную информацию об объектах GtkTreeStore и функциях объекта GtkListStore см. в документации API, а мы пойдем дальше и рассмотрим компонент Представление типа GtkTreeView.

Создание объекта GtkTreeView — сама простота: только передайте в конструктор в качестве параметра модель типа GtkTreeStore или GtkListStore:

GtkWidget* view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));

Сейчас самое время настроить виджет для отображения данных именно так, как вы хотите. Для каждого столбца следует определить GtkCellRenderer и источник данных. Можно выбрать, например, визуализацию только определенных столбцов данных или изменить порядок вывода столбцов.

GtkCellRenderer — это объект, отвечающий за прорисовку каждой ячейки на экране, и существует три подкласса, имеющие дело с текстовыми ячейками, ячейками пиксельной графики и ячейками кнопок-выключателей:

□ GtkCellRendererText;

□ GtkCellRendererPixBuf;

□ GtkCellRendererToggle.

В вашем Представлении будет применено текстовое представление ячеек, GtkCellRendererText.

GtkCellRenderer* renderer = gtk_cell_renderer_text_new();

gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),

 &quot;This is the column title&quot;, renderer, &quot;text&quot;, 0, NULL);

Вы создаете представление ячейки и передаете его в функцию вставки столбца. Эта функция позволяет сразу задать свойства GtkCellRendererText, передавая заканчивающиеся значением NULL пары "ключ/значение". В качестве параметров указаны представление дерева, номер столбца, заголовок столбца, представление ячейки и его свойства. В приведенном примере вы задаете атрибут "text", передав номер столбца источника данных. Для объекта GtkCellRendererText определено несколько других атрибутов, включая подчеркивание, шрифт, размер и т.д.

В упражнении 16.7, выполнив необходимые шаги, вы увидите, как это работает на практике.

Упражнение 16.7. Использование виджета GtkTreeView

Введите следующий программный код и назовите файл tree.с.

1. Примените тип enum для обозначения столбцов, чтобы можно было ссылаться на них по именам. Общее количество столбцов удобно обозначить как N_COLUMNS:

#include &lt;gtk/gtk.h&gt;

enum {

 COLUMN_TITLE, COLUMN_ARTIST, COLUMN_CATALOGUE, N_COLUMNS

};

void closeApp(GtkWidget *window, gpointer data) {

 gtk_main_quit();

}

int main(int argc, char *argv[]) {

 GtkWidget *window;

 GtkTreeStore *store;

 GtkWidget *view;

 GtkTreeIter parent_iter, child_iter;

 GtkCellRenderer *renderer;

 gtk_init(&amp;argc, &amp;argv);

 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

 gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);

 g_signal_connect(GTK_OBJECT(window), &quot;destroy&quot;,

  GTK_SIGNAL_FUNC(сloseApp), NULL);

2. Далее вы создаете модель дерева, передавая количество столбцов и тип каждого из них:

 store = gtk_tree_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING,

  G_TYPE_STRING);

3. Следующий этап — вставка родительской и дочерней строк в дерево:

 gtk_tree_store_append(store, &amp;parent_iter, NULL);

 gtk_tree_store_set(store, &amp;parent_iter,

  COLUMN_TITLE, &quot;Dark Side of the Moon&quot;,

  COLUMN_ARTIST, &quot;Pink Floyd&quot;,

  COLUMN_CATALOGUE, &quot;B000024D4P&quot;, -1);

 gtk_tree_store_append(store, &amp;child_iter, &amp;parent_iter);

 gtk_tree_store_set (store, &amp;child_iter,

  COLUMN_TITLE, &quot;Speak to Me&quot;, -1);

 view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));

4. Наконец, добавьте столбцы в представление, задавая источники данных для них и заголовки:

 renderer = gtk_cell_renderer_text_new();

 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),

  COLUMN_TITLE, &quot;Title&quot;, renderer, &quot;text&quot;,

  COLUMN_TITLE, NULL);

 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),

  COLUMN_ARTIST, &quot;Artist&quot;, renderer, &quot;text&quot;,

  COLUMN_ARTIST, NULL);

1 ... 286 287 288 289 290 291 292 293 294 ... 324
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Основы программирования в Linux - Мэтью Нейл бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга