linux下gtk+一个将字符串大写化的小示例

简介:

首先用glade画图形界面:
这里写图片描述

并且设置gtk元素名称(ID)以及设置事件回调函数。

下面写代码:

#include <gtk/gtk.h>
#include <string.h>

#define UI_PATH "./entry.ui"
#define MAIN_WINDOW "window"
#define CHK_EDITABLE "chk_editable"
#define CHK_VISIBLE "chk_visible"

void editable_toggled(GtkWidget *self,GtkEntry *entry){
    //gtk_entry_set_editable(entry,GTK_TOGGLE_BUTTON(self)->active);
    printf("%s:enter function\n",__func__);
    gtk_editable_set_editable((GtkEditable*)entry,gtk_toggle_button_get_active(
        GTK_TOGGLE_BUTTON(self)));
}

void visible_toggled(GtkWidget *self,GtkEntry *entry){
    //gtk_entry_set_visibility(entry,GTK_TOGGLE_BUTTON(self)->active);
    printf("%s:enter function\n",__func__);
    gtk_entry_set_visibility(entry,gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)));
}

void entry_changed(GtkWidget *self,gpointer user_data){
    gchar *text = (gchar*)gtk_entry_get_text(GTK_ENTRY(self));
    printf("%s:text is %s\n",__func__,text);
    text = g_ascii_strup(text,strlen(text));
    gtk_entry_set_text(GTK_ENTRY(self),text);
}

int main(int argc,char **argv){
    GtkWidget *w;
    GError *error;
    gtk_init(&argc,&argv);
    GtkBuilder *builder = gtk_builder_new();
    if(!gtk_builder_add_from_file(builder,UI_PATH,&error)){
        g_critical("Couldn't load builder file: %s",error->message);
        g_error_free(error);
    }

    w = GTK_WIDGET(gtk_builder_get_object(builder,MAIN_WINDOW));
    if(!w){
        g_critical("Widget \"%s\" is missing in file %s",MAIN_WINDOW,UI_PATH);
    }
    gtk_window_set_title(GTK_WINDOW(w),"clist todo list");
    gtk_window_set_default_size(GTK_WINDOW(w),300,100);
    gtk_window_set_position(GTK_WINDOW(w),GTK_WIN_POS_CENTER_ALWAYS);
    gtk_container_set_border_width(GTK_CONTAINER(w),5);

    gtk_builder_connect_signals(builder,NULL);
    g_object_unref(builder);

    gtk_widget_show_all(w);
    gtk_main();
    return 0;
}

GtkEntry有2个更改事件,分别是activate和changed;前者在文本输入控件内按回车时触发,后者当文本控件内部的文本发生变化时触发。

编译完毕执行效果如下:
这里写图片描述

相关文章
|
1月前
|
Linux C++
LInux下Posix的传统线程示例
LInux下Posix的传统线程示例
20 1
|
2月前
|
安全 Linux 网络安全
Linux使用HTTP隧道代理代码示例模版
Linux使用HTTP隧道代理代码示例模版
20 0
|
2月前
|
Shell Linux C语言
【Shell 命令集合 文档编辑 】Linux 递归搜索指定字符串 rgrep命令使用指南
【Shell 命令集合 文档编辑 】Linux 递归搜索指定字符串 rgrep命令使用指南
18 0
|
2月前
|
Shell Linux C语言
【Shell 命令集合 文档编辑】Linux 在文件中查找指定的字符串 fgrep命令使用指南
【Shell 命令集合 文档编辑】Linux 在文件中查找指定的字符串 fgrep命令使用指南
40 2
|
4月前
|
消息中间件 Kubernetes NoSQL
Linux时间校准(ntpdate及NTP客户端代码校准示例)
Linux时间校准(ntpdate及NTP客户端代码校准示例)
|
14天前
|
Linux Perl
Linux系统替换字符串常用命令
请注意,`sed`命令可以非常强大,可以根据不同的需求使用不同的选项和正则表达式来进行更复杂的字符串替换操作。
19 0
|
3月前
|
Linux PHP 开发工具
Linux查找含有某字符串文件并批量替换
Linux查找含有某字符串文件并批量替换
|
3月前
|
存储 Linux 应用服务中间件
VMware安装无GUI版本的Linux(CentOS7)——安装Nginx示例demo
VMware安装无GUI版本的Linux(CentOS7)——安装Nginx示例demo
121 1
|
3月前
|
存储 应用服务中间件 Linux
Linux安装nginx——完整示例
Linux安装nginx——完整示例
96 0
|
3月前
|
Java 芯片 Docker
docker运行声网linux-server-sdk示例
docker运行声网linux-server-sdk示例
30 1