当前位置: 首页 > news >正文

GTK4 常用控件入门

0 前言

在《GTK4开发环境搭建》中,我们成功运行了第一个 GTK4 窗口程序,认识了 GtkApplication、GtkApplicationWindow 和 GtkLabel 三个基础组件。本文将在此基础上系统学习 GTK4 的常用控件。

GTK4 提供了丰富的控件库(GtkWidget),从简单的标签、按钮到复杂的树视图、文本编辑器。掌握这些控件是构建图形界面的基础。

本文目标

  • 掌握常用基础控件的使用(Label、Button、Entry、Image、ProgressBar)
  • 理解容器的布局管理(GtkBox)
  • 学会信号与回调机制的实际应用
  • 每个控件都提供独立可运行的完整代码

阅读前提

  • 已完成 GTK4 开发环境搭建
  • 了解 C 语言基础语法
  • 理解 GObject 对象系统和信号机制(参见《GTK开发从入门到实践:开篇导读》第2章)

1 控件基础概念

1.1 GtkWidget 层次结构

GTK4 中所有控件都继承自 GtkWidget 基类,形成了清晰的继承体系。了解继承关系有助于理解控件的共有属性。

常用控件继承关系

GObject
对象基类

GInitiallyUnowned

GtkWidget
控件基类

GtkLabel
标签

GtkButton
按钮

GtkEntry
单行输入框

GtkBox
盒子容器

GtkWindow
窗口

图1.1 常用控件继承关系

继承的实际意义

  • 所有控件都可用gtk_widget_set_visible()控制显示/隐藏
  • 所有控件都可用gtk_widget_set_halign()设置水平对齐方式
  • 所有控件都可通过g_signal_connect()连接信号

1.2 控件的共有属性和方法

在深入学习具体控件前,先掌握所有控件共有的基础操作:

显示/隐藏控件

// 显示控件gtk_widget_set_visible(widget,TRUE);// 隐藏控件gtk_widget_set_visible(widget,FALSE);// 或使用 show/hide 便捷函数gtk_widget_show(widget);gtk_widget_hide(widget);// @file: examples/common_api_show_hide.c

尺寸设置

// 设置请求的宽度(高度自适应内容)gtk_widget_set_size_request(widget,200,-1);// 设置最小尺寸(实际尺寸由布局容器决定)gtk_widget_set_size_request(widget,200,100);// @file: examples/common_api_size.c

对齐方式

// 水平对齐:START(左)、CENTER(中)、END(右)gtk_widget_set_halign(widget,GTK_ALIGN_START);// 垂直对齐:START(上)、CENTER(中)、END(下)gtk_widget_set_valign(widget,GTK_ALIGN_CENTER);// @file: examples/common_api_align.c

边距设置

// 设置四个方向的外边距gtk_widget_set_margin_top(widget,10);gtk_widget_set_margin_bottom(widget,10);gtk_widget_set_margin_start(widget,10);gtk_widget_set_margin_end(widget,10);// 或使用统一的边距gtk_widget_set_margin_start(widget,10);gtk_widget_set_margin_end(widget,10);gtk_widget_set_margin_top(widget,10);gtk_widget_set_margin_bottom(widget,10);// @file: examples/common_api_margin.c

2 常用控件详解

2.1 GtkLabel:标签控件

GtkLabel 是 GTK 中最简单的控件,用于显示只读文本。它在界面中起到说明、提示、标题等作用。

主要功能

  • 显示单行或多行文本
  • 支持简单的 HTML 标记(<b>加粗</b><i>斜体</i>
  • 文本选择与复制(默认禁用)

常用 API

// 创建标签GtkWidget*gtk_label_new(constgchar*text);// 设置文本内容voidgtk_label_set_text(GtkLabel*label,constgchar*text);// 获取当前文本constgchar*gtk_label_get_text(GtkLabel*label);// 设置标记文本(支持 HTML)voidgtk_label_set_markup(GtkLabel*label,constgchar*str);// @file: examples/label_api.c

完整示例:文本操作与选择

创建label_demo.c

#include<gtk/gtk.h>staticvoidon_toggle_selectable(GtkButton*button,GtkLabel*label){gboolean selectable=gtk_label_get_selectable(label);gtk_label_set_selectable(label,!selectable
http://www.jsqmd.com/news/381619/

相关文章:

  • 2026年靠谱的虹吸刮刀离心机厂家排名,口碑好的选哪家 - 工业设备
  • 探寻淄博全屋定制正规厂商,全屋风格定制如何选择 - 工业推荐榜
  • 复习——ARM Cortex-A 裸机开发深度解析 - 详解
  • 总结2026年口碑好的高拍仪生产商,福建捷宇科技在列 - 工业品牌热点
  • 从此告别拖延! 降AI率软件 千笔·专业降AIGC智能体 VS 灵感ai
  • 谢飞机大战Java技术八股文:从MCP到Agent架构的灵魂拷问
  • 聊聊水性色浆服务商,哪家口碑靠谱售后有保障 - myqiye
  • 电商秒杀场景下的Spring Boot与Redis面试全解 | Java大厂真题实战
  • python微信小程序的计算机考研刷题平台
  • 摆脱论文困扰! 9个一键生成论文工具测评:研究生毕业论文+开题报告高效写作指南
  • 总结有实力的视光中心加盟专业公司,十大品牌揭秘 - 工业品牌热点
  • 2026年环保全屋定制选购指南,济南腾昕专业品质有保障 - 工业推荐榜
  • python微信小程序的高校班务管理系统
  • 赶deadline必备 一键生成论文工具 千笔ai写作 VS 灵感风暴AI
  • 不踩雷! 降AIGC平台 千笔·降AI率助手 VS 万方智搜AI,本科生专属选择
  • TinyPro v1.4.0 正式发布:支持 Spring Boot、移动端适配、新增卡片列表和高级表单页面 - 详解
  • 讲讲浙江求推荐的农村建房公司,专业服务有保障 - 工业设备
  • 企业认证服务多少钱?靠谱的机构推荐 - mypinpai
  • 干货合集:AI论文软件,千笔写作工具 VS 灵感ai,继续教育必备!
  • TDengine IDMP 数据可视化 7. 事件列表
  • 从45亿春节红包看AI普及化:当“AI一下”成为常态,产业智能化驶入深水区
  • 探讨考研数学培训哪家可靠,颜语堂教育咨询实力解读 - 工业品网
  • Jetson AGX 系列平台及其在人形机器人中的应用进展、比较优势与不足、应用前景和发展趋势(1)
  • 基于python-django-flask的社区便民生活服务平台
  • 好用还专业!8个降AIGC工具测评:本科生降AI率必备攻略
  • 基于python-django-flask的旅游景点推荐系统
  • Xai架构
  • 学长亲荐!继续教育论文神器 —— 千笔ai写作
  • 基于python-django-flask的日用品仓储管理系统 仓库库存系统
  • macOS红队实战:利用DarwinOps DMG模板绕过Gatekeeper