`
SavageGarden
  • 浏览: 223293 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linux GUI ---------按钮、事件处理

阅读更多
#include <gtk-2.0/gtk/gtk.h>
/* 回调函数在本例中忽略了传递给程序的所有参数。下面是回调函数 */
void hello(GtkWidget *widget, gpointer data)
{
	g_print("Hello World\n");
}
gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
{
	/* 如果在"delete_event"处理程序中返回FALSE,
	 * GTK将引发一个"destory"信号,
	 * 返回TRUE意味着你不想关闭窗口。
	 * 这些在弹出"你真的要退出?"对话框时很有作用*/
	g_print("delete event occurred\n");
	/* 将TRUE改为FALSE,主窗口就会用一个"delete_event"信号,然后退出*/
	return(TRUE);
}
/* 另一个回调函数 */
void destory(GtkWidget *widget, gpointer data)
{
	gtk_main_quit();
}
int main(int argc, char *argv[])
{
	/* GtkWidget是构件的存储类型 */
	GtkWidget *window;
	GtkWidget *button;
	/* 在所有的Gtk应用程序中都应该调用。
	 * 它的作用是解析由命令行传递进来的参数并将它返回给应用程序*/
	gtk_init(&argc, &argv);
	/* 创建一个主窗口 */
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	/* 当给窗口一个"delete_event"信号时
	 * (这个信号是由窗口管理器发出的,
	 * 通常是在窗口标题条右边的"x"按钮,
	 * 或者在标题条的快捷菜单上选择"close"选项时发出的),
	 * 我们要求调用上面定义的delete_event()函数
	 * 传递给这个回调函数的数据是NULL,回调函数会忽略这个参数*/
	gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(delete_event), NULL);
	/* 这里,我们给"destory"事件连接一个信号处理函数,
	 * 当我们在窗口上调用gtk_widget_destory()函数
	 * 或者在"delete_event"事件的回调函数中返回FALSE时会发生这个事件*/
	gtk_signal_connect(GTK_OBJECT(window), "destory", GTK_SIGNAL_FUNC(destory), NULL);
	/* 设置窗口的边框宽度 */
	gtk_container_set_border_width(GTK_CONTAINER(window), 10);
	/* 创建一个标题为"Hello World"的按钮 */
	button = gtk_button_new_with_label("Hello World");
	/* 当按钮接收到"clicked"时,它会调用hello()函数,
	 * 传递的参数为NULL。函数hello()是在上面定义的 */
	gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(hello), NULL);
	/* 当点击按钮时,通过调用gtk_widget_destroy(window)函数销毁窗口
	 * 另外,"destory"信号可以从这里发出,也可以来自于窗口管理器*/
	gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(window));
	/* 将按钮组装到窗口中(一个gtk容器中) */
	gtk_container_add(GTK_CONTAINER(window), button);
	/* 最后一步就是显示新创建的构件 */
	gtk_widget_show(button);
	/* 显示窗口 */
	gtk_widget_show(window);
	/* 所有的GTK应用程序都应该有一个gtk_main()函数。
	 * 程序的控制权停在这里并等着事件的发生(比如一次按键或鼠标事件)*/
	gtk_main();
	return(0);
}

 编译:

gcc -Wall -g helloworld.c -o helloworld `pkg-config --cflags --libs gtk+-2.0`

 点击窗口的“X”按钮,因为回调函数delete_event中最后返回的是TRUE,因此将在后台看到输出"delete event occurred“,而窗口并不会关闭,将返回值改为FALSE,重新编译,点击“X”按钮,后台仍然输出"delete event occurred“但同时窗口关闭,而如果点击"Hello World"按钮,后台输出“Hello World”同时窗口关闭

 

0
0
分享到:
评论

相关推荐

    NXP gui-guider-1.4.1安装包

    1. **LVGL集成**:gui-guider与LVGL的紧密集成意味着设计师可以直接在设计环境中创建和编辑LVGL兼容的图形元素,如按钮、文本框、滑块、图表等。这简化了将设计转换为实际代码的过程。 2. **用户友好界面**:gui-...

    Nginx-GUI-For-Windows-x64-v1.6.zip

    3. **系统状态可视化**:Nginx-GUI提供实时的服务器状态监控,包括连接数、请求速率、处理时间等关键指标。这有助于管理员快速识别性能瓶颈和异常,及时进行优化调整。此外,还可以查看错误日志,帮助定位和解决问题...

    LVGL神器 GUI-Guider-1.7.1 使用指导手册

    LVGL神器 GUI-Guider_1.7.1 使用指导手册 最新版,2024-05-29 以显示仪表为例的使用过程指导说明

    Gui-Guider-Setup-1.4.0-GA 嵌入式图形应用程序UI

    GUI Guide的IDE包含了多种预设的控件,如按钮、文本框、滑块、进度条等,这些控件可以自由调整大小、位置和样式,以满足不同应用场景的需求。开发者可以根据项目需求,选择合适的控件并进行组合,构建出符合用户体验...

    Gui-Guider-Setup-1.2.1-GA.rar

    3. **事件处理**:支持事件绑定,如点击、触摸等,方便添加用户交互逻辑。 4. **代码生成**:生成优化过的lvgl源码,方便集成到项目中。 5. **版本管理**:支持版本控制,便于团队协作开发和版本迭代。 6. **兼容性*...

    jd-gui-windows-1.4.0

    - 支持多种平台:虽然这里讨论的是Windows版本,JD-GUI还提供Linux和Mac OS X版本,确保跨平台的兼容性。 4. 反编译的局限性 - 完整性:由于反编译过程中的一些技术限制,反编译的源代码可能不完全等同于原始的....

    PyPI 官网下载 | xinput-gui-0.2.0.tar.gz

    在实际应用中,开发者可能需要结合xinput-gui提供的接口,编写代码来监听设备输入,比如游戏控制器的按钮按下或摇杆移动,并根据这些输入做出相应的程序响应。例如,你可以创建一个简单的程序,当检测到特定的游戏...

    LVGL模拟器专用Gui-Guider-Setup-1_1_0-GA.rar

    通过这个模拟器,开发者可以预览和交互各种GUI元素,如按钮、滑块、文本框、图像等,而无需在目标硬件上部署代码。这大大简化了开发流程,加快了调试速度,减少了硬件资源的需求。 该压缩包包含了一个名为“Gui-...

    反编译工具jadx-gui

    1. **多平台支持**:尽管jadx-gui最初设计为Windows平台的应用,但通过Java实现,它也能够跨平台运行在Linux和Mac OS等系统上,具备广泛的适用性。 2. **代码质量**:jadx-gui以其生成的高质量Java源代码而著称。它...

    jd-gui - 反编译工具

    3. **加载`.class`文件**:在jd-gui的界面中,点击“Open File”按钮,选择要反编译的`.class`文件,jd-gui会自动反编译并显示源代码。 4. **查看和分析代码**:在左侧的文件浏览器中,可以浏览加载的类文件;右侧...

    qt-opensource-linux-x64-5.9.1.rar

    在中标麒麟系统上,由于其基于Linux内核但又具有中国特色,可能需要确保安装过程中处理好依赖关系,有时可能需要手动安装或更新一些库。同样,Ubuntu用户也需注意其默认的库版本可能与QT不完全兼容,可能需要安装...

    GUI--QTE2.2源码.rar

    GUI(Graphical User Interface,图形...总之,"GUI--QTE2.2源码.rar"为开发者提供了一个深入理解Qt事件处理和GUI开发的实践平台,通过学习和研究这份源码,不仅可以提升个人技能,也有助于解决实际项目中遇到的问题。

    QT5-C-GUI-Programming-CookBook

    在C++方面,书中会讲解如何利用QT5的类库来处理事件、信号与槽机制,这是QT5中非常核心的概念,用于对象间的通信。此外,还会涉及面向对象编程基础,如继承、多态和封装,这些都是使用QT5进行GUI开发时必不可少的...

    Python-GUI-PyQ5总概述.xmind

    在IT行业中,GUI(图形用户界面)编程是创建交互式应用程序的关键部分,它使得用户能够通过图标、菜单、按钮等直观地与软件进行交互。在Python编程领域,Qt库是一个非常流行的GUI框架,特别是它的PyQt5版本,为...

    PyPI 官网下载 | qtgui-0.0.1.tar.gz

    qtgui-0.0.1是该库的一个早期版本,可能包含了基本的GUI组件和功能,如按钮、文本框、菜单等,以及布局管理器,使得开发者可以轻松地组织和调整控件的位置。 在Python中使用qtgui-0.0.1,首先需要解压下载的".tar....

    qt-opensource-linux-x64-5.10.0.zip

    1. **Qt Widgets**:这是Qt的核心组件之一,提供了大量预定义的GUI控件,如按钮、文本框、列表视图等,用于创建传统的窗口式应用程序。 2. **Qt Quick (QML)**:Qt Quick 是Qt的现代用户界面设计语言,基于声明式...

    qt5.12.1-qt-opensource-linux-x64-5.12.1.run

    Qt Core:提供核心功能,如事件处理、定时器、文件处理等。 Qt GUI:提供用于创建和管理图形用户界面的工具和控件。 Qt Widgets:提供一套丰富的预制控件,如按钮、文本框、列表框等。 Qt Network:提供网络编程的...

    eclipse-committers-2018-09-linux-gtk-x86_64.tar

    根据提供的文件信息,我们可以深入探讨与“eclipse-committers-2018-09-linux-gtk-x86_64.tar”相关的几个关键知识点,包括Eclipse平台、Linux环境下的开发工具、GTK以及x86_64架构等。 ### Eclipse 平台 Eclipse ...

    gtk-and-glade3-gui-programming-tutorial_glade3_tutorial_gtk_prog

    1. **GTK+基础**:了解GTK+的核心概念,如窗口、按钮、文本框等基本组件,以及事件处理和信号机制。 2. **Glade3界面设计**:学习如何启动Glade3,创建新的项目,选择和放置控件,调整它们的属性,以及设置布局和...

Global site tag (gtag.js) - Google Analytics