gtk默认信号id的列表

 

 

 

   gtk版本号, 2.8.8, 我查了一下前面的gtk版本,相同信号在不同gtk版本中不同id号,可以用g_single_lookup函数,用信号名来查找id号。

 

以下是gtk默认的信号名列表:

--------------------------------------------------

 

show
hide
map
unmap
realize
unrealize
size_request
size_allocate
state_changed
parent_set
hierarchy_changed
style_set
direction_changed
grab_notify
child_notify
mnemonic_activate
grab_focus
focus
event
event_after
button_press_event
button_release_event
scroll_event
motion_notify_event
composited_changed
delete_event
destroy_event
expose_event
key_press_event
key_release_event
enter_notify_event
leave_notify_event
configure_event
focus_in_event
focus_out_event
map_event
unmap_event
property_notify_event
selection_clear_event
selection_request_event
selection_notify_event
selection_received
selection_get
proximity_in_event
proximity_out_event
drag_leave
drag_begin
drag_end
drag_data_delete
drag_motion
drag_drop
drag_data_get
drag_data_received
visibility_notify_event
client_event
no_expose_event
window_state_event
grab_broken_event
popup_menu
show_help
accel_closures_changed
screen_changed
can_activate_accel

 

 

 

#include <gtk/gtk.h> // 按钮点击事件处理函数 static void activate(GtkApplication* app, gpointer user_data) { // 创建主窗口,将其与应用关联,并设置标题 GtkWidget *window = gtk_application_window_new(app); gtk_window_set_title(GTK_WINDOW(window), "GTK示例程序"); gtk_window_set_default_size(GTK_WINDOW(window), 400, 300); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); // 创建垂直布局盒,设置子控件间距为10像素 GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10); gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); gtk_container_add(GTK_CONTAINER(window), vbox); // 创建标签控件并添加到布局盒 GtkWidget *label = gtk_label_new("欢迎使用GTK+3和C语言示例程序"); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); // 创建按钮控件 GtkWidget *button = gtk_button_new_with_label("点击我"); gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 0); // 为按钮的"clicked"信号连接回调函数 g_signal_connect(button, "clicked", G_CALLBACK(gtk_main_quit), NULL); // 显示所有控件 gtk_widget_show_all(window); } int main(int argc, char **argv) { // 创建GTK应用,使用唯一的应用ID GtkApplication *app = gtk_application_new( "org.gtk.example", G_APPLICATION_FLAGS_NONE); // 连接应用的"activate"信号到回调函数 g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); // 运行应用并获取返回值 int status = g_application_run(G_APPLICATION(app), argc, argv); // 释放应用资源 g_object_unref(app); return status; }
06-08
### GTK+3 C语言 示例程序 代码解析 以下是对一个典型的GTK+3 C语言示例程序的解析和改进。此示例展示了如何创建一个包含按钮的窗口,并在按钮点击时显示一条消息。 #### 示例代码 ```c #include <gtk/gtk.h> // 按钮点击回调函数 static void on_button_clicked(GtkButton *button, gpointer user_data) { g_print("按钮被点击了!\n"); } int main(int argc, char *argv[]) { GtkWidget *window; // 主窗口 GtkWidget *button; // 按钮 // 初始化GTK+ gtk_init(&argc, &argv); // 创建主窗口 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "GTK+3 示例"); // 设置窗口标题 gtk_window_set_default_size(GTK_WINDOW(window), 200, 100); // 设置窗口大小 // 设置窗口关闭事件处理函数 g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); // 创建按钮 button = gtk_button_new_with_label("点击我"); // 将按钮添加到窗口中 gtk_container_add(GTK_CONTAINER(window), button); // 连接按钮点击事件到回调函数 g_signal_connect(button, "clicked", G_CALLBACK(on_button_clicked), NULL); // 显示所有控件 gtk_widget_show_all(window); // 进入GTK主循环 gtk_main(); return 0; } ``` --- #### 代码解析 1. **初始化GTK+** - `gtk_init(&argc, &argv)` 是所有GTK+应用程序的入口,用于初始化GTK+库[^2]。 2. **创建主窗口** - 使用 `gtk_window_new(GTK_WINDOW_TOPLEVEL)` 创建一个顶级窗口。 - 使用 `gtk_window_set_title` 和 `gtk_window_set_default_size` 分别设置窗口的标题和默认大小[^3]。 3. **设置窗口关闭事件** - 使用 `g_signal_connect` 将窗口的 `"destroy"` 信号连接到 `gtk_main_quit` 函数,确保窗口关闭时退出主循环。 4. **创建按钮** - 使用 `gtk_button_new_with_label` 创建一个带有标签的按钮。 - 使用 `gtk_container_add` 将按钮添加到窗口中。 5. **连接按钮点击事件** - 使用 `g_signal_connect` 将按钮的 `"clicked"` 信号连接到自定义的回调函数 `on_button_clicked`,当按钮被点击时会触发该函数。 6. **进入主循环** - 调用 `gtk_main()` 启动GTK+的主事件循环,等待用户交互。 --- #### 改进点 1. **错误处理** - 在实际应用中,应加入错误处理机制。例如,在加载图片或文件时,检查是否成功加载[^3]。 2. **多线程支持** - 如果需要执行耗时操作,可以考虑使用多线程,避免阻塞UI主线程。 3. **国际化支持** - 使用 `gettext` 或其他工具实现国际化支持,使程序能够适应不同语言环境。 4. **动态布局** - 使用更复杂的布局管理器(如 `GtkBox` 或 `GtkGrid`)来替代简单的容器,以实现更灵活的界面设计。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值