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

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. 创建一个项目,点击图标
  2. 点击保存按钮
  3. 弹出一个对话框,创建项目文件夹,点击图标
  4. 在顶部名称栏中输入自定义的名称
  5. 点击右下角的保存按钮,项目创建完成

 第二步:设置用户登入界面窗口

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图形化设计器

演示环境说明&#xff1a;本机使用Windows 11 家庭版本搭载 Ubuntu 22.04.4 LTS 子系统&#xff0c;同时并安装Ubuntu桌面虚拟化软件XLaunch。 如果没有搭建好上述问题&#xff0c;请参考&#xff1a;windows11子系统Ubuntu 22.04.4子安装图形化界面 Glade是什么&#xff1f;…...

152. 乘积最大子数组

152. 乘积最大子数组 题目链接&#xff1a;152. 乘积最大子数组 代码如下&#xff1a; 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的设计模式&#xff0c;它允许程序直接发起一个异步I/O操作并立即返回&#xff0c;而不需要等待该操作完成。一旦I/O操作实际完成&#xff0c;系统会通知相应的完成处理程序&#xff08;Completion Handler&#xff09;&#xff0c;该处理程序随后执行…...

Charles抓包工具

一、charles简介 1&#xff0c;charles是什么 Charles中文名叫青花瓷&#xff0c;它是一款基于HTTP协议的代理服务器&#xff0c;通过成为电脑或者浏览器的代理&#xff0c;然后截取请求和请求结果达到分析抓包的目的。 特点:跨平台、半免费 2&#xff0c;charles工作原理 前…...

RabbitMQ如何保证消息可靠

解决办法&#xff1a; 1、做好消息确认机制&#xff08;pulisher、consumer[手动ACK]&#xff09; 2、每一个发送的消息都在数据库做好记录。定期将失败的消息再次发送一遍 消息确认机制&#xff1a; 生产者确认模式&#xff1a;确认消息是否发送到broker&#xff0c;失败…...

学习笔记——路由网络基础——路由的高级特性

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

网络编程之XDP、TC和IO_URING以及DPDK

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

晶谷高温烧结导电浆料用低熔点玻璃粉 晶谷耐高温导电漆导电油墨高温玻璃粉

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

【Mysql】DQL操作单表、创建数据库、排序、聚合函数、分组、limit关键字

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

Excel 常用技巧(四)

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

【Linux 基础】文件与目录管理

1. 文件和目录的基本概念 文件&#xff1a;是数据的集合&#xff0c;可以是文本、图像、视频等。 目录&#xff08;也称为文件夹&#xff09;&#xff1a;是文件和子目录的集合&#xff0c;用于组织文件。 2. 目录和路径 绝对路径&#xff1a;从根目录&#xff08;/&#x…...

C++系列-String(一)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” string是用于字符串&#xff0c;可以增删改查 首先&#xff0c;我们来看一下string的底层 接下来&#xff0c;我们来看一下string的常用接口有哪些&#xff1a; #define _CRT_S…...

服务器硬件的基础知识

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

java基于ssm+jsp 汽车在线销售系统

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

【干货】Android中高级开发进阶必备资料(附:PDF+视频+源码笔记)

4、数据传输与序列化 5、Java虚拟机原理 6、高效IO 设计思想解读开源框架 随着互联网企业的不断发展&#xff0c;产品项目中的模块越来越多&#xff0c;用户体验要求也越来越高&#xff0c;想实现小步快跑、快速迭代的目的越来越难&#xff0c;插件化技术应用而生。如果没有…...

AI通用写作模版,可以在此基础上进行修改

指令 角色 作者 &#xff1a;你是一位自媒体爆文写作专家&#xff0c;负责撰写文章&#xff0c;具备对特定主题的深入理解和一定的写作技巧。读者 &#xff1a;25-55岁通用人群&#xff0c;对资讯新闻类感兴趣&#xff0c;需要易于理解且富有启发性的内容。 技能 研究能力&…...

openEuler2203SP3自定义ios

需求&#xff1a; 1、legacy启动 2、/boot分区1G&#xff0c;剩余给/&#xff0c;lvm分区 3、创建root密码和一个普通用户user&#xff0c;密码Hello2024 4、服务器安装&#xff08;选上development、legacy-unix、security-tools&#xff09; 5、关闭firewalld、selinux …...

一年又一年志愿

--第一篇 20220624十年苦读&#xff0c;青春飞扬&#xff0c;其道大光&#xff0c;来日方长。又是一年高考时&#xff0c;高考改变命运&#xff0c;但是后面还有更关键几步&#xff0c;跟大家一起聊聊。之前写我考状元的经历&#xff0c;堂弟考省前十的经历&#xff0c;有不少…...

NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解

1. MindSQL(库) MindSQL 是一个 Python RAG&#xff08;检索增强生成&#xff09;库&#xff0c;旨在仅使用几行代码来简化用户与其数据库之间的交互。 MindSQL 与 PostgreSQL、MySQL、SQLite 等知名数据库无缝集成&#xff0c;还通过扩展核心类&#xff0c;将其功能扩展到 Sn…...

OpenGL3.3_C++_Windows(15)

理解glad&#xff1a; OpenGL只是一个标准/规范&#xff0c;具体的实现是由驱动开发商针对特定显卡实现的&#xff0c;由于OpenGL驱动版本众多&#xff0c;它大多数函数的位置都无法在编译时确定下来&#xff0c;需要在运行时查询&#xff0c;因此开发者需要在运行时获取函数…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...