The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

GTK+ 2.0 Tutorial

<<< Previous

Разные виджеты (Miscellaneous Widgets)

Next >>>


Ввод текста

Виджет ввода позволяет вводить текст и отображать его в специальном текстовом окне. Текст может быть установлен вызовом функции позволяющей заменять предустановленный текст на новый, или может использоваться текущий текстовый ввод.

Функция для создания виджетов ввода текста:

GtkWidget *gtk_entry_new( void );

Следующая функция меняет текст, находящийся в данный момент в виджете ввода:

void gtk_entry_set_text( GtkEntry    *entry,
                         const gchar *text );

Функция gtk_entry_set_text() устанавливает новое содержимое виджета ввода, перезаписывая текущее содержимое. Заметьте, класс ввода содержит Editable interface (да, gobject поддерживают джава-подобный интерфейс (Java-like interfaces)) который содержит много функций для манипуляций содержимым.

Содержимое ввода может быть восстановлено при помощи следующей функции. Это полезно для функций обратного вызова описанных ниже.

const gchar *gtk_entry_get_text( GtkEntry *entry );

Значение возвращенное этой функцией применяется для внутреннего использования и не должно высвобождаться с помощью использования free() или g_free().

Если мы не хотим чтобы что-либо изменяло содержимое ввода, то мы можем изменить статус редактирования:

void gtk_editable_set_editable( GtkEditable *entry,
                                gboolean     editable );

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

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

void gtk_entry_set_visibility( GtkEntry *entry,
                               gboolean  visible );

Установки области текста могут быть определены следующей функцией. Это чаще всего используется для установки текста по умолчанию, который удаляется после ввода пользователя.

void gtk_editable_select_region( GtkEditable *entry,
                                 gint         start,
                                 gint         end );

Если нужно перехватить момент, когда пользователь производит ввод, можно подключить сигнал activate или changed. Сигнал Activate производится, когда пользователь нажал клавишу в области виджета ввода. Сигнал Changed производится, когда происходит любое изменение текста вообще, например когда вводится или удаляется символ.

Ниже приведен пример кода, для создания виджета ввода текста.

#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
void enter_callback( GtkWidget *widget,
                     GtkWidget *entry )
{
  const gchar *entry_text;
  entry_text = gtk_entry_get_text (GTK_ENTRY (entry));
  printf("Entry contents: %s\n", entry_text);
}
void entry_toggle_editable( GtkWidget *checkbutton,
                            GtkWidget *entry )
{
  gtk_editable_set_editable (GTK_EDITABLE (entry),
                             GTK_TOGGLE_BUTTON (checkbutton)->active);
}
void entry_toggle_visibility( GtkWidget *checkbutton,
                              GtkWidget *entry )
{
  gtk_entry_set_visibility (GTK_ENTRY (entry),
                            GTK_TOGGLE_BUTTON (checkbutton)->active);
}
int main( int   argc,
          char *argv[] )
{
    GtkWidget *window;
    GtkWidget *vbox, *hbox;
    GtkWidget *entry;
    GtkWidget *button;
    GtkWidget *check;
    gint tmp_pos;
    gtk_init (&argc, &argv);
    /* создаём новое окно */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_set_size_request (GTK_WIDGET (window), 200, 100);
    gtk_window_set_title (GTK_WINDOW (window), "GTK Entry");
    g_signal_connect (G_OBJECT (window), "destroy",
                      G_CALLBACK (gtk_main_quit), NULL);
    g_signal_connect_swapped (G_OBJECT (window), "delete_event",
                              G_CALLBACK (gtk_widget_destroy), 
                              G_OBJECT (window));
    vbox = gtk_vbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (window), vbox);
    gtk_widget_show (vbox);
    entry = gtk_entry_new ();
    gtk_entry_set_max_length (GTK_ENTRY (entry), 50);
    g_signal_connect (G_OBJECT (entry), "activate",
                      G_CALLBACK (enter_callback),
                      (gpointer) entry);
    gtk_entry_set_text (GTK_ENTRY (entry), "hello");
    tmp_pos = GTK_ENTRY (entry)->text_length;
    gtk_editable_insert_text (GTK_EDITABLE (entry), " world", -1, &tmp_pos);
    gtk_editable_select_region (GTK_EDITABLE (entry),
                                0, GTK_ENTRY (entry)->text_length);
    gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0);
    gtk_widget_show (entry);
    hbox = gtk_hbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (vbox), hbox);
    gtk_widget_show (hbox);
                                  
    check = gtk_check_button_new_with_label ("Editable");
    gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);
    g_signal_connect (G_OBJECT (check), "toggled",
                      G_CALLBACK (entry_toggle_editable), (gpointer) entry);
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
    gtk_widget_show (check);
    
    check = gtk_check_button_new_with_label ("Visible");
    gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);
    g_signal_connect (G_OBJECT (check), "toggled",
                      G_CALLBACK (entry_toggle_visibility), (gpointer) entry);
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
    gtk_widget_show (check);
                                   
    button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
    g_signal_connect_swapped (G_OBJECT (button), "clicked",
                              G_CALLBACK (gtk_widget_destroy),
                              G_OBJECT (window));
    gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
    gtk_widget_grab_default (button);
    gtk_widget_show (button);
    
    gtk_widget_show (window);
    gtk_main();
    return 0;
}

<<< Previous

Home

Next >>>

Statusbars

Up

Spin Buttons






Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру