Ubuntu 之Glade图形化设计器
演示环境说明:本机使用Windows 11 家庭版本搭载 Ubuntu 22.04.4 LTS 子系统,同时并安装Ubuntu桌面虚拟化软件XLaunch。
如果没有搭建好上述问题,请参考:windows11子系统Ubuntu 22.04.4子安装图形化界面
Glade是什么?
glade是一个RAD(rapid application develop,快速应用开发)工具,能够为gtk+工具包和gnome桌面环境快速而简单地开发用户界面。Glade中设计的用户界面保存为XML,通过使用GtkBuilder GTK +对象,应用程序可以根据需要动态加载这些界面。通过使用GtkBuilder,Glade XML文件可以用于多种编程语言,包括C,C ++,C#,Vala,Java,Perl,Python等。Glade是根据GNU GPL许可证发布的自由软件。
Ubuntu 快速搭建Glade 开发环境
#安装 devhelp GTK文档查看程序
sudo apt-get install devhelp#安装 gtk/glib 的API参考手册及其它帮助文档
sudo apt-get install libglib2.0-doc libgtk-3-doc#安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库
sudo apt-get install glade libgtk-3-dev
Ubuntu 运行Glade
1、打开Ubuntu 系统控制台,输入glade 命令,图形界面软件打开后如下截图所示。
Glade 项目实例
功能要求:设计一个简单的登入窗口页面。
原型设计:
第一步:创建UI项目文件夹
- 创建一个项目,点击图标
- 点击保存按钮
- 弹出一个对话框,创建项目文件夹,点击图标
- 在顶部名称栏中输入自定义的名称
- 点击右下角的保存按钮,项目创建完成
第二步:设置用户登入界面窗口
1.在Glade中创建顶层窗口,如图
2.更改窗口ID
我们现在可以选择更改窗口ID。这是将在C代码中引用窗口的名称。在下图中,它从GtkWindow的默认名称更改为window_main。在Glade窗口右侧的“常规”窗格中进行更改。
3.更改默认窗口大小
可以选择更改窗口的默认大小。这将是由C程序创建时窗口的大小。如需自定义窗口大小,如下图,下图显示窗口大小已更改为640像素宽x 480像素高。
4.将回调函数连接到destroy 信号
当C程序显示当前在glade中设计的窗口时,当窗口关闭时,它将发出destroy 信号。回调函数需要连接到destroy 信号,关闭窗口时,将运行的destroy 信号。
如图,点击“信号”标签,向下滚动,找到GtkWidget ,点击展开项,向下滚动找到destroy。点击<Type here>标签,输入on,软件会给推荐的处理函数名称,选择如图所示的名称,按Enter键确认。
5.更改窗口标题,如图提示操作,输入标题名称
6.保存glade文件,点击右上角按钮
第三步:设置登入界面窗口内元素
1、选择布局控件GtkBox(盒子/水平布局),设置4行并且间隔设置为10 元素。
2、在GtkBox(盒子/水平布局)第一行放置一个普通文本用来显示"标题 "
3、 在GtkBox(盒子/水平布局)第二行放置一个GtkGride(表格控件),设置一行两列
左边放置普通文本设置默认值为"username", 设置默认宽度和高度
右边设置输入文本框,设置ID 为"username", 设置输入框提示语, 设置默认宽度和高度。
4、请重复第三步,将普通文本显示默认值修改为"password",
将输入文本框的ID修完passwd
5、在GtkBox(盒子/水平布局)第四行放置一个GtkGride(表格控件),设置一行两列。
左边放置普通按钮设置标题为"login", 设置默认宽度和高度, 并设置点击响应事件(on_login_clicked)。
右边放置普通按钮设置标题为"cancel", 设置默认宽度和高度, 并设置点击响应事件(on_cancel_clicked)。
第四步:GTK 程序与Glade 图形化设计页面集成
第一步:创建gtk_demo30.c文件,使用名为his_login.glade的XML文件创建你上面步骤设计的登入窗口。建议:将此文件保存到包含已创建的glade文件的同一目录或文件夹中。代码如下所示:
#include<stdio.h>
#include<gtk-3.0/gtk/gtk.h>static void on_login_clicked(GtkButton *button, gpointer user_data){GtkEntry *username = GTK_ENTRY(gtk_builder_get_object(GTK_BUILDER(user_data), "username"));GtkEntry *passwd = GTK_ENTRY(gtk_builder_get_object(GTK_BUILDER(user_data), "passwd"));const gchar *username_text = gtk_entry_get_text(username);const gchar *passwd_text = gtk_entry_get_text(passwd);printf("用户输入的用户名:%s, 密码:%s\n",username_text, passwd_text);printf("点击按钮触发\n");
} static void on_cancel_clicked(GtkButton *button, gpointer user_data){printf("取消按钮触发\n");
}int main(int argc, char *argv[]) {GtkBuilder *builder;GtkWidget *window;GtkWidget *login;GtkWidget *cancel;GtkWidget *username;GtkWidget *passwd;gtk_init(&argc, &argv); // gtk 初始化builder = gtk_builder_new();// 创建新的builder 对象gtk_builder_add_from_file(builder, "his_login.glade", NULL);// 组件实例化window = GTK_WIDGET(gtk_builder_get_object(builder,"window_main")); // gtk 窗口实例化login = GTK_WIDGET(gtk_builder_get_object(builder,"login")); //登入按钮实例化cancel = GTK_WIDGET(gtk_builder_get_object(builder,"cancel")); //取消按钮实例化username = GTK_WIDGET(gtk_builder_get_object(builder,"username")); //账户输入文本框passwd = GTK_WIDGET(gtk_builder_get_object(builder,"passwd")); //密码输入文本框//组件事件绑定 g_signal_connect (login, "clicked", G_CALLBACK (on_login_clicked), builder);g_signal_connect (cancel, "clicked", G_CALLBACK (on_cancel_clicked), builder);gtk_builder_connect_signals(builder, NULL);//g_object_unref(builder);gtk_widget_show(window); // 显示windows 窗口包含的所有gtk 组件gtk_main(); //gtk 主事件循环开启return 0;}
总结
1、glade 声明ID和回调函数,必须在*c 文件中必须一一对应上.
2、glade 组件实例化是通过builder 构建器完成,不在是通过gtk 相关组件头文件调用实现。
编译代码,在编译代码之前,请确保已安装GTK+3开发库。在Ubuntu 命令窗口中输入编译命令:
gcc `pkg-config --cflags gtk+-3.0` -o gtk_demo30 gtk_demo30.c `pkg-config --libs gtk+-3.0`
运行应用程序,输入./gtk_demo30,效果如下图:
Glade 项目运行中遇到的问题
第一:绘制完his_login.glade 文件,编写完gtk_demo30.c 执行完编译命令,执行./gtk_demo30 程序,窗口提示:
Gtk-CRITICAL **: gtk_builder_get_object: assertion `GTK_IS_BUILDER (builder)' failed
Google 一下,国外网友给出的解决办法:
以下是原文截图:
解决办法:
大致意思是:移除g_object_unref(G_OBJECT(builder))
原因:由于g_object_unref(G_OBJECT(builder)) 导致无法使用builder构建器访问其他的组件,因此需要被移除。
相关文章:

Ubuntu 之Glade图形化设计器
演示环境说明:本机使用Windows 11 家庭版本搭载 Ubuntu 22.04.4 LTS 子系统,同时并安装Ubuntu桌面虚拟化软件XLaunch。 如果没有搭建好上述问题,请参考:windows11子系统Ubuntu 22.04.4子安装图形化界面 Glade是什么?…...
152. 乘积最大子数组
152. 乘积最大子数组 题目链接:152. 乘积最大子数组 代码如下: class Solution { public:int maxProduct(vector<int>& nums) {int resnums[0];vector<int> f(nums.size()1,0),g(nums.size()1,0);f[0]nums[0],g[0]nums[0];for(int i1…...
proactor模式
Proactor模式是一种异步I/O的设计模式,它允许程序直接发起一个异步I/O操作并立即返回,而不需要等待该操作完成。一旦I/O操作实际完成,系统会通知相应的完成处理程序(Completion Handler),该处理程序随后执行…...

Charles抓包工具
一、charles简介 1,charles是什么 Charles中文名叫青花瓷,它是一款基于HTTP协议的代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的。 特点:跨平台、半免费 2,charles工作原理 前…...
RabbitMQ如何保证消息可靠
解决办法: 1、做好消息确认机制(pulisher、consumer[手动ACK]) 2、每一个发送的消息都在数据库做好记录。定期将失败的消息再次发送一遍 消息确认机制: 生产者确认模式:确认消息是否发送到broker,失败…...

学习笔记——路由网络基础——路由的高级特性
七、路由的高级特性 1、路由迭代(路由递归) 路由必须有直连的下一跳才能够指导转发,静态路由或BGP路由的下一跳可能不是直连的邻居,因此需要计算出一个直连的下一跳和对应的出接口,这个过程就叫做路由迭代(路由递归)。 添加一条去往20.1.1.…...

网络编程之XDP、TC和IO_URING以及DPDK
一、网络编程常见的技术 在前面已经分析过了XDP、TC和eBPF。也基本把三者间的关系理清了,但现在又有一个疑惑涌了上来。在前面提到过的IO_URING和DPDK与这些技术有什么关系呢?其实只要认真的看过分析文章可能大家心里都已经基本清楚了。 正如在前面不断…...

晶谷高温烧结导电浆料用低熔点玻璃粉 晶谷耐高温导电漆导电油墨高温玻璃粉
晶谷浆料玻璃粉是一种用于电子浆料的材料,它在电子浆料中起到粘结和降低烧结温度的作用,能够提高浆料与基材之间的结合力。 浆料玻璃粉的性能特点包括: - 软化点:软化点在350至650度之间。 - 热膨胀系数:热膨胀系数…...

【Mysql】DQL操作单表、创建数据库、排序、聚合函数、分组、limit关键字
DQL操作单表 1.1 创建数据库 •创建一个新的数据库 db2 CREATE DATABASE db2 CHARACTER SET utf8;•将db1数据库中的 emp表 复制到当前 db2数据库 ** 1.2 排序** 通过 ORDER BY 子句,可以将查询出的结果进行排序 (排序只是显示效果,不会影响真实数据) 语法结构:…...

Excel 常用技巧(四)
Microsoft Excel 是微软为 Windows、macOS、Android 和 iOS 开发的电子表格软件,可以用来制作电子表格、完成许多复杂的数据运算,进行数据的分析和预测,并且具有强大的制作图表的功能。由于 Excel 具有十分友好的人机界面和强大的计算功能&am…...

【Linux 基础】文件与目录管理
1. 文件和目录的基本概念 文件:是数据的集合,可以是文本、图像、视频等。 目录(也称为文件夹):是文件和子目录的集合,用于组织文件。 2. 目录和路径 绝对路径:从根目录(/&#x…...

C++系列-String(一)
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” string是用于字符串,可以增删改查 首先,我们来看一下string的底层 接下来,我们来看一下string的常用接口有哪些: #define _CRT_S…...

服务器硬件的基础知识
引言 服务器是现代数据中心和企业IT基础设施的核心组成部分。了解服务器硬件的基本知识不仅有助于选择和维护服务器,还能提高系统性能和可靠性。本文将详细介绍服务器硬件的各个方面,包括处理器、内存、存储、网络、散热和电源等,帮助读者全…...

java基于ssm+jsp 汽车在线销售系统
1 前台功能模块 网站首页 网页首页汽车在线销售系统模块如下:首页、汽车信息、新闻资讯、留言反馈、我的收藏管理等功能图1 图1网页首页 网页前台车辆信息效果图如图2所示 图2 车辆信息界面图 2 管理员功能模块 管理员输入个人的账号、密码登录系统,…...

【干货】Android中高级开发进阶必备资料(附:PDF+视频+源码笔记)
4、数据传输与序列化 5、Java虚拟机原理 6、高效IO 设计思想解读开源框架 随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有…...
AI通用写作模版,可以在此基础上进行修改
指令 角色 作者 :你是一位自媒体爆文写作专家,负责撰写文章,具备对特定主题的深入理解和一定的写作技巧。读者 :25-55岁通用人群,对资讯新闻类感兴趣,需要易于理解且富有启发性的内容。 技能 研究能力&…...
openEuler2203SP3自定义ios
需求: 1、legacy启动 2、/boot分区1G,剩余给/,lvm分区 3、创建root密码和一个普通用户user,密码Hello2024 4、服务器安装(选上development、legacy-unix、security-tools) 5、关闭firewalld、selinux …...
一年又一年志愿
--第一篇 20220624十年苦读,青春飞扬,其道大光,来日方长。又是一年高考时,高考改变命运,但是后面还有更关键几步,跟大家一起聊聊。之前写我考状元的经历,堂弟考省前十的经历,有不少…...

NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解
1. MindSQL(库) MindSQL 是一个 Python RAG(检索增强生成)库,旨在仅使用几行代码来简化用户与其数据库之间的交互。 MindSQL 与 PostgreSQL、MySQL、SQLite 等知名数据库无缝集成,还通过扩展核心类,将其功能扩展到 Sn…...
OpenGL3.3_C++_Windows(15)
理解glad: OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的,由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询,因此开发者需要在运行时获取函数…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...

OPENCV图形计算面积、弧长API讲解(1)
一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API…...