-->

Основы программирования в Linux

На нашем литературном портале можно бесплатно читать книгу Основы программирования в Linux, Мэтью Нейл-- . Жанр: Программирование / ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Основы программирования в Linux
Название: Основы программирования в Linux
Дата добавления: 16 январь 2020
Количество просмотров: 668
Читать онлайн

Основы программирования в Linux читать книгу онлайн

Основы программирования в Linux - читать бесплатно онлайн , автор Мэтью Нейл
В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

Перейти на страницу:

API у виджета

GtkToggleButton
очень простой:

<b>GtkWidget* gtk_toggle_button_new(void);</b>

<b>GtkWidget* gtk_toggle_button_new_with_label(const gchar* label);</b>

<b>gboolean gtk_toggle_button_get_active(GtkToggleButton *toggle_button);</b>

<b>void gtk_toggle_button_set_active(GtkToggleButton *toggle_button,</b>

<b> gboolean is_active);</b>

Наиболее интересные функции —

gtk_toggle_button_get_active
и
gtk_toggle_button_set_active
, которые вы вызываете для чтения и установки состояния кнопки-выключателя. Если характеристика функционирования равна
TRUE
, это означает, что кнопка-выключатель
GtkToggleButton
включена.

GtkCheckButton

Кнопка-флажок

GtkCheckButton
— это замаскированная кнопка-выключатель
GtkToggleButton
. Вместо скучного прямоугольного отображения
GtkToggleButton
кнопка
GtkCheckButton
выводится как привлекательный флажок с расположенным рядом текстом. Функциональных различий между ними нет.

<b>GtkWidget* gtk_check_button_new(void);</b>

<b>GtkWidget* gtk_check_button_new_with_label(const gchar *label);</b>

GtkRadioButton

Эта кнопка немного отличается от предыдущих, т.к. может группироваться с другими кнопками того же типа. Переключатель (или радиокнопка)

GtkRadioButton
— одна из тех кнопок, которые позволяют выбирать только один вариант из группы предложенных. Имя заимствовано у старых радиоприемников с механическими кнопками, которые выскакивали с треском, возвращаясь в прежнее состояние, при нажатии другой кнопки.

<b>GtkWidget* gtk_radio_button_new(GSList *group);</b>

<b>GtkWidget* gtk_radio_button_new_from_widget(GtkRadioButton *group);</b>

<b>GtkWidget* gtk_radio_button_new_with_label(GSList *group, const gchar *label);</b>

<b>void gtk_radio_button_set_group(GtkRadioButton *radio_button, GSList *group);</b>

<b>GSList* gtk_radio_button_get_group(GtkRadioButton *radio_button);</b>

Группа переключателей представлена в объекте-списке библиотеки GLib, названном

GSList
. Для того чтобы объединить переключатели в группу, вы можете создать объект
GSList
и затем передать ему каждую кнопку с помощью функций
gtk_radio_button_new
и
gtk_radio_button_get_group
, есть и более легкий способ в виде функции
gtk_radio_button_new_with_widget
, которая включает в GSList существующую кнопку. Вы увидите ее в действии в упражнении 16.6, которое позволит вам опробовать разные кнопки
GtkButton
.

Упражнение 16.6.
GtkCheckButton
,
GtkToggleButton
и
GtkRadioButton

Введите следующий текст в файл с именем buttons.с.

1. Сначала объявите указатели на кнопки как глобальные переменные:

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

#include &lt;stdio.h&gt;

GtkWidget *togglebutton;

GtkWidget *checkbutton;

GtkWidget *radiobutton1, *radiobutton2;

void closeApp(GtkWidget *window, gpointer data) {

 gtk_main_quit();

}

2. Далее определите вспомогательную функцию, которая упаковывает

GtkWidget
и
GtkLabel
в контейнер
GtkHbox
и затем вставляет этот
GtkHbox
в заданный виджет- контейнер. Это поможет вам сократить повторяющийся программный код:

void add_widget_with_label(GtkContainer * box, gchar * caption,

 GtkWidget * widget) {

 GtkWidget *label = gtk_label_new(caption);

 GtkWidget *hbox = gtk_hbox_new(TRUE, 4);

 gtk_container_add(GTK_CONTAINER(hbox), label);

 gtk_container_add(GTK_CONTAINER(hbox), widget);

 gtk_container_add(box, hbox);

}

3. 

print_active
— еще одна вспомогательная функция, которая выводит текущее состояние заданной кнопки-выключателя
GtkToggleButton
со строкой описания. Он вызывается из функции
button_clicked
, функции обратного вызова, связанной с сигналом
clicked
кнопки OK. При каждом щелчке мышью этой кнопки вы получаете на экране отчет о состоянии кнопок:

void print_active(char * button_name, GtkToggleButton* button) {

 gboolean active = gtk_toggle_button_get_active(button);

 printf(&quot;%s is %sn&quot;, button_name, active?&quot;active&quot;:&quot;not active&quot;);

}

void button_clicked(GtkWidget *button, gpointer data) {

 print_active(&quot;Checkbutton&quot;, GTK_TOGGLE_BUTTON(checkbutton));

 print_active(&quot;Togglebutton&quot;, GTK_TOGGLE_BUTTON(togglebutton));

 print_active(&quot;Radiobutton1&quot;, GTK_TOGGLE_BUTTON(radiobutton1));

 print_active(&quot;Radiobutton2&quot;, GTK_TOGGLE_BUTTON(radiobutton2));

 printf(&quot;n&quot;);

}

4. В функции

main
вы создаете виджеты кнопок, поочередно помещаете их в контейнер
GtkVBox
, добавив пояснительные метки, и связываете сигнал обратного вызова с кнопкой OK:

gint main(gint argc, gchar *argv[]) {

 GtkWidget* window;

 GtkWidget *button;

Перейти на страницу:
Комментариев (0)
название