Основы программирования в Linux - Мэтью Нейл Страница 289
- Категория: Компьютеры и Интернет / Интернет
- Автор: Мэтью Нейл
- Страниц: 324
- Добавлено: 2020-09-22 15:22:12
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту pbn.book@yandex.ru для удаления материала
Основы программирования в Linux - Мэтью Нейл краткое содержание
Прочтите описание перед тем, как прочитать онлайн книгу «Основы программирования в Linux - Мэтью Нейл» бесплатно полную версию:В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стандартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов
Основы программирования в Linux - Мэтью Нейл читать онлайн бесплатно
GtkWidget *vbox;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
g_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(closeApp), NULL);
button = gtk_button_new_with_label("Ok");
togglebutton = gtk_toggle_button_new_with_label("Toggle");
checkbutton = gtk_check_button_new();
radiobutton1 = gtk_radio_button_new(NULL);
radiobutton2 =
gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(radiobutton1));
vbox = gtk_vbox_new(TRUE, 4);
add_widget_with_label(GTK_CONTAINER(vbox), "ToggleButton:",
togglebutton);
add_widget_with_label(GTK_CONTAINER(vbox), "CheckButton:",
checkbutton);
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 для каждого типа кнопки, вы можете сократить требующийся программный код.
GtkTreeView
К этому моменту мы рассмотрели несколько простых виджетов GTK+, но не все виджеты представляют собой однострочные инструменты для ввода или отображения. Сложность виджетов ничем не ограничивается, и GtkTreeView — яркий пример виджета, инкапсулирующего огромный объем функциональных возможностей.
GtkWidget
+---- GtkContainer
+---- GtkTreeView
GtkTreeView — член семейства виджетов, новых для комплекта GTK+ 2, создающий представление данных в виде дерева или списка наподобие тех, которые вы можете встретить в электронной таблице или файловом менеджере. С помощью виджета GtkTreeView можно создать сложные представления данных, смешивая текст, растровую графику и даже данные, вводимые с помощью виджетов GtkEntry, и т.д.
Самый быстрый способ испытания GtkTreeView — запуск приложения gtk-demo, которое поставляется вместе с GTK+. Демонстрационное приложение показывает возможности всех виджетов GTK+, включая GtkTreeView (рис. 16.11).

Рис. 16.11
Семейство GtkTreeView составляется из четырех компонентов:
□ GtkTreeView — отображение дерева или списка;
□ GtkTreeViewColumn — представление столбца списка или дерева;
□ GtkCellRenderer — управление отображаемыми ячейками;
□ GtkTreeModel — представление данных дерева и списка.
Первые три компонента формируют так называемое Представление, а последний — Модель. Концепция разделения Представления и Модели (часто называемая проектным шаблоном Модель/Представление/Действие (Model/View/Controller) или сокращенно MVC) не свойственна GTK+, но проектированию уделяется все больше и больше внимания на всех этапах программирования.
Ключевое достоинство проектного шаблона MVC заключается в возможности одновременной визуализации данных в виде разных представлений без ненужного их дублирования. Например, текстовые редакторы могут иметь две разные панели и редактировать разные фрагменты документа без хранения в памяти двух копий документа.
Шаблон MVC также очень популярен в Web-программировании, поскольку облегчает создание Web-сайтов, которые визуализируются в мобильных или WAP-обозревателях не так, как в настольных, просто за счет наличия отдельных компонентов Представление, оптимизированных для Web-обозревателя каждого типа. Вы также можете отделить логику сбора данных, например, запросов к базе данных, от логики пользовательского интерфейса.
Мы начнем с рассмотрения компонента Модель, представленного в GTK+ двумя типами. Объект типа GtkTreeStore содержит многоуровневые данные, например иерархию каталогов, а объект GtkListStore предназначен для простых данных.
Для создания объекта GtkTreeStore в функцию передается количество столбцов, за которым следуют типы всех столбцов:
GtkWidget *store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_INT,
G_TYPE_BOOLEAN);
Чтение, вставка, редактирование и удаление данных из модели выполняется с помощью структур GtkTreeIter. Эти структуры итераторов указывают на узлы дерева (или строки списка) и помогают находить фрагменты структур данных потенциально очень большого объема, а также манипулировать ими. Есть несколько вызовов API для получения объекта-итератора для разных точек дерева, но мы рассмотрим простейшую функцию gtk_tree_store_append.
Перед тем как вставлять какие-либо данные в модель дерева, вам нужно получить итератор, указывающий на новую строку. Функция gtk_tree_store_append заполняет объект GtkTreeIter, который представляет новую строку в дереве, как строку верхнего уровня (если вы передаете значение NULL в третьем аргументе), так и подчиненную или дочернюю строку (если вы передаете итератор главной или родительской строки):
Жалоба
Напишите нам, и мы в срочном порядке примем меры.