行编辑,只允许输入一行内容的控件,如密码输入框。

24_常用控件之行编辑 - 图1

行编辑的创建:

GtkWidget *gtk_entry_new(void);

返回值:行编辑指针

设置行编辑内容的最大长度:

void gtk_entry_set_max_length(GtkEntry *entry,
                                gint max);

entry:行编辑
max:长度的最大值,这里填0代表长度不作限制

设置行编辑的文本内容:

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

entry:行编辑
text:文本内容

获取行编辑的内容:

const gchar *gtk_entry_get_text(GtkEntry *entry);

entry:行编辑
返回值:获取到的行编辑内容

设置编辑控件是否允许编辑:

void gtk_editable_set_editable(GtkEditable *editable,
                                gboolean is_editable);

editable:需要操作的控件
is_editable:TRUE代表能允许编辑,默认属性,FALSE不允许编辑

设置行编辑的内容是否可视(不能可视相当于密码模式,看不到文本的内容):

void gtk_entry_set_visibility(GtkEntry *entry,
                                gboolean visible);

entry:行编辑
visible:TRUE可视,FALSE不可视

常用信号:”activate”

当用户在文本输入控件内部按回车键时引发activate信号;

例子代码如下:

#include <gtk/gtk.h> 

// 按Enter,获取行编辑的内容
void enter_callback( GtkWidget *widget, gpointer entry ) 
{ 
    const gchar *entry_text; 
    // 获得文本内容
    entry_text = gtk_entry_get_text(GTK_ENTRY(entry)); 
    printf("Entry contents: %s\n", entry_text); 
}

int main( int argc, char *argv[] ) 
{ 
    gtk_init (&argc, &argv);     // 初始化

    GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);     // 创建窗口
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
    gtk_widget_set_size_request(window, 200, 50);                // 设置窗口的大小

    GtkWidget *entry = gtk_entry_new();  // 创建行编辑     
    gtk_container_add(GTK_CONTAINER(window), entry);     // 表格放入窗口
    gtk_entry_set_max_length(GTK_ENTRY(entry), 100);     // 设置行编辑显示最大字符的长度
    gtk_entry_set_text(GTK_ENTRY(entry), "hello word");  // 设置内容
    //gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);      // 密码模式

    /* 如果我们想在用户输入文本时进行响应,可以为activate设置回调函数。
     * 当用户在文本输入构件内部按回车键时引发Activate信号;
     */
    g_signal_connect(entry, "activate", G_CALLBACK(enter_callback), entry);

    gtk_widget_show_all(window); // 显示窗口所有控件

    gtk_main();         // 主事件循环

    return 0; 
} 

效果运行图如下:

24_常用控件之行编辑 - 图2