Linux 系统图像化编程GTK入门

环境前期准备

演示环境:Windows 11 + Ubuntu  22.04.4 +VS Code

前提条件:1、Windows 11 子系统Ubuntu 22.04.4 已经安装图形化界面,如果没有安装请参考文章:

windows11子系统Ubuntu 22.04.4子安装图形化界面

2、Ubuntu 22.04.4 软件源修改为国内软件源,如果还没有更换请参考如下指令:

//查看Ubuntu 系统内核版本和版本代号
wz2012@LAPTOP-8R0KHL88:/mnt/e/vsCode/cpro$ uname -r
5.10.16.3-microsoft-standard-WSL2
wz2012@LAPTOP-8R0KHL88:/mnt/e/vsCode/cpro$ lsb_release -c
Codename:       jammy
//更换Ubuntu 国内阿里云数据源
# vi  /etc/apt/sources.list//添加如下内容
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse保存后执行如下指令:
1. sudo apt-get update        更新版本软件包信息
2. sudo apt-get upgrade        删除旧的
3. sudo apt-get remove gcc    删除默认gcc
4. sudo apt install build-essential
5. gcc -v                                查看gcc 版本

 3、Ubuntu 软件包检索、查询、安装命令

apt-cache search all #查看软件包列表,非常多
apt-cache search all | grep XXX #正则查询带有XXX标识符的软件包
apt-get install XXX #安装软件包
apt-get remove XXX #卸载软件包,保留配置文件
apt-get -purge remove XXX #卸载软件包,删除配置文件
apt-get update #更新软件包列表
apt-get autoclean #清空deb软件包
dpkg -l #查看本机已安装的软件包,非常多

第一步:Ubuntu 安装 GTK 软件包

请参考如下指令:

1、检索GTK 库,版本为libgtk-3-dev
wz2012@LAPTOP-8R0KHL88:~$ apt-cache search all | grep libgtk-3-dev
libgtk-3-dev - development files for the GTK library2、安装GTK 库,版本为libgtk-3-dev
wz2012@LAPTOP-8R0KHL88:~$ sudo apt-get install libgtk-3-dev
[sudo] password for wz2012:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
.......

第二步:VS Code 编写GTK 窗口程序

#include<stdio.h>
#include<gtk-3.0/gtk/gtk.h>/*** GTK 3.0 简单窗口输出*/static void print_hello(GtkWidget *widget, gpointer data) {g_print("Hello World\n");
}int main(int argc, char *argv[]) {GtkWidget *window;GtkWidget *button;gtk_init(&argc, &argv); // gtk 初始化window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // gtk 窗口实例化g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); //window 窗口绑定销毁事件,并触发gtk_main_quite 函数button = gtk_button_new_with_label("你好, GTK 3.0"); //  gtk Button 实例化g_signal_connect(button, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数gtk_container_add(GTK_CONTAINER(window), button); // 将button 按钮放到windows 窗口容器中gtk_widget_show_all(window); // 显示windows 窗口包含的所有gtk 组件gtk_main(); //gtk 主事件循环开启return 0;
}

问题一:引入gtk 的头文件<gtk-3.0/gtk/gtk.h>,VSCode 显示:无法打开源文件 gtk-3.0/gtk/gtk.h

解决办法:通过dpkg 命令查看 GTK 包含那些文件,重点找出头文件和库文件。

dpkg -L libgtk-3-dev
...
/usr/include/gtk-3.0/gtk/gtk.h -- gtk3.0的头文件
/usr/lib/x86_64-linux-gnu/libgdk-3.so
/usr/lib/x86_64-linux-gnu/libgtk-3.so  -- gtk3.0静态库文件路径地址
....

问题二:编辑VS Code 扫描库文件路径地址。

第一步:执行:gcc -v -E -x c++ - 查看Ubuntu 系统 C语言 includePath 路径地址信息。

第二步:打开VSCode  C/C++ 编辑配置,可以通过快捷键方式打开:Ctrl +Shirt +p

源内容

{"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**"],"defines": [],"compilerPath": "/usr/bin/gcc","cStandard": "gnu17","cppStandard": "gnu++17","intelliSenseMode": "linux-gcc-x64"}],"version": 4
}

 添加Ubuntu C语言includePath 路径地址信息

{"configurations": [{"name": "Linux","includePath": ["/usr/include/**","${workspaceFolder}/**","/usr/include/c++/11","/usr/include/x86_64-linux-gnu/c++/11","/usr/include/c++/11/backward","/usr/lib/gcc/x86_64-linux-gnu/11/include","/usr/local/include","/usr/include/x86_64-linux-gnu"],"defines": [],"compilerPath": "/usr/bin/gcc","cStandard": "gnu17","cppStandard": "gnu++17","intelliSenseMode": "linux-gcc-x64"}],"version": 4
}

 添加GTK3.0 库路径地址信息:"/usr/lib/**"

{"configurations": [{"name": "Linux","includePath": ["/usr/include/**","/usr/lib/**","${workspaceFolder}/**","/usr/include/c++/11","/usr/include/x86_64-linux-gnu/c++/11","/usr/include/c++/11/backward","/usr/lib/gcc/x86_64-linux-gnu/11/include","/usr/local/include","/usr/include/x86_64-linux-gnu"],"defines": [],"compilerPath": "/usr/bin/gcc","cStandard": "gnu17","cppStandard": "gnu++17","intelliSenseMode": "linux-gcc-x64"}],"version": 4
}

问题三:启动startxface 4 提示服务无法正常连接

首先确认网络是无线还是有线,我现在连接的是无线网。使用ipconfig 命令查看相关ip 地址信息

 

编辑 

$ vi ~/.bashrc
# 在文件最后追加下面内容,地址使用上面查看到的
旧   export DISPLAY=172.17,80.1:0
新   export DISPLAY=192.168.207.253:0$source ~/.bashrc
#执行刚修改的初始化文件,使之立即生效

第三步:编译GTK程序,Ubuntu可视化窗口展示

编译GTK 程序指令:

gcc gtk_demo1.c -o gtk_demo1 `pkg-config --cflags --libs gtk+-3.0`
wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code$ ./gtk_demo1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言笔记第16篇:编译和链接

1、翻译环境和运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行机器指令&#xff08;二进制指令&#xff09; 第2种是执行环境&#xff0c;它用于实际执行代码 2、翻译环境 那翻译环境是怎…

数据资产管理的未来趋势:洞察技术前沿,探讨数据资产管理在云计算、大数据、区块链等新技术下的发展趋势

一、引言 随着信息技术的飞速发展&#xff0c;数据已成为企业最重要的资产之一。数据资产管理作为企业核心竞争力的关键组成部分&#xff0c;其发展趋势和技术创新受到了广泛关注。特别是在云计算、大数据、区块链等新技术不断涌现的背景下&#xff0c;数据资产管理面临着前所…

通过文章id递归查询所有评论(xml)

<!-- 通过文章id递归查询所有评论 --> <select id"findByArticleId" resultMap"commentResultMap">SELECT * FROM mxg_comment WHERE parent_id -1AND article_id #{articleId}ORDER BY create_date DESC </select><!-- 将每…

【凤凰房产-注册安全分析报告-缺少轨迹的滑动条】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

2024 端午节巽寮湾游玩记录

2024 端午节巽寮湾游玩记录 文章目录 2024 端午节巽寮湾游玩记录一、前言二、巽寮湾游玩行程1、三天衣食住行2、主要图片&#xff1a; 三、其他1、小结2、巽寮湾游玩建议3、感慨 一、前言 时间总是过得很快&#xff0c;只要你活着时间就会不停往前走。 所以你以后的路其实都是…

外卖APP开发详解:从同城O2O系统源码开始

近期&#xff0c;从事软件开发的小伙伴们都在讨论外卖APP&#xff0c;热度非常之高&#xff0c;所以小编今天将与大家一同探讨同城O2O系统源码、外卖APP开发。 一、外卖APP开发的前期准备 了解目标用户的需求&#xff0c;分析竞争对手的优劣势&#xff0c;明确自身的市场定位。…

如何在Vue3中处理异步API调用并更新表单数据(附Demo)

目录 前言1. 问题所示2. 知识分析3. 实战 前言 从实战问题中剖析知识点 1. 问题所示 执行Vue3数据的时候&#xff0c;终端输出的data如下所示 Promise {<pending>} [[Prototype]] : Promise [[PromiseState]] : "fulfilled" [[PromiseResult]] : Array(…

Paddleocr数据增强调用逻辑

数据增强调用逻辑 以在ppocr/data/simple_dataset.py为例&#xff1a; get_ext_data通过self.ops[:self.ext_op_transform_idx]获取配置文件中数据增强 self.ops在def __init__(self, config, mode, logger, seedNone):中通过解析配置文件中transforms内容获取数据增强操作&a…

ADB->获取当前正在显示的Fragment和Activity的ADB命令

获取当前显示的Activity adb shell "dumpsys window | grep mCurrentFocus"指令拆解adb shell&#xff1a;启动一个远程shell来运行设备上的命令dumpsys window&#xff1a;获取当前窗口管理器的信息|&#xff1a;将前一个命令的输出作为后一个命令的输入grep mCurr…

【Unity拖拽物体】实现对点中的3D物体进行拖拽的功能

场景结构&#xff0c;两个普通模型 第一种 脚本所挂载的物体才可以被拖拽 【PC鼠标版本】 using UnityEngine;// 这个脚本实现了&#xff0c;本脚本所在的游戏物体能够被拖拽 public class DragObjectT : MonoBehaviour {private Vector3 screenPoint; // 存储物体在屏幕上的位…

python GUI开发: tkinter菜单创建,记事本和画图软件综合项目的实战演练

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【0287】Postgres内核在pg_internal.init不存在情况下的relcache cache初始化实现

上一篇: 【0264】深入分析relcache(relation descriptor cache)缓存初始化第2阶段(2) 0. 前言 在用户未CREATE DATABASE 情况(即initdb创建了Postgres数据库集簇,或有过psql登录数据库动作)下,PGDATA/global目录下是还不存在pg_internal.init文件的,因此,启动Post…

elasticsearch安装(centos7)

先给出网址 elasticsearch&#xff1a;Download Elasticsearch | Elastic elasticKibana&#xff1a;Download Kibana Free | Get Started Now | Elastic Logstash&#xff1a;Download Logstash Free | Get Started Now | Elastic ik分词&#xff1a;Releases infinilabs/…

百度智能云推出智能运维工具,云助手让云服务器运维更简单

为了提升云服务器执行命令的效率&#xff0c;百度智能云发布了 SmartTerm 远程连接终端。不止于此&#xff0c;为了更加极致地提升运维效率&#xff0c;我们又推出了「云助手」这款轻量快捷的运维工具。 ​ 只有做过云服务器运维的人才知道管理上万台云服务器有多崩溃。在海量…

Ruby 数据库访问 - DBI 教程

Ruby 数据库访问 - DBI 教程 本文将详细介绍如何使用 Ruby 的 DBI(Database Interface)库来访问和操作数据库。DBI 是 Ruby 语言中一个常用的数据库接口库,它提供了一套统一的接口来访问不同的数据库系统,如 MySQL、PostgreSQL、SQLite 等。通过本文的学习,您将掌握如何使…

了解振弦采集仪在建筑物安全监测中的应用与研究

了解振弦采集仪在建筑物安全监测中的应用与研究 摘要&#xff1a;河北稳控科技振弦采集仪是一种常用的结构物安全监测设备&#xff0c;广泛应用于建筑物、桥梁、塔楼等工程结构的监测。本文将从振弦采集仪的原理、应用案例和研究进展等方面进行详细介绍&#xff0c;以便更好地…

解决python从TD数据库取50w以上大量数据慢的问题

1.问题背景描述 python项目中的时序数据都存放在TD数据库中&#xff0c;数据是秒级存入的&#xff0c;当查询一周数据时将超过50w数据量&#xff0c;这是一次性获取全量数据到python程序很慢&#xff0c;全流程10秒以上&#xff0c;希望进行优化加速 2.排查 首先&#xff0c…

vue中使用发布订阅的方式进行vue组件之间的通信

全部实现代码如下&#xff1a; header.vue组件的相关代码 Search GitHub Users <input type“button” value“Search” class“btn btn-primary” placeholder“请输入 github 用户名” click“search”> main组件的相关代码 请输入搜索用户的名称 loading {{error…

springboot3 基础特性(1)

文章目录 一、SpringApplication三种方式1.1 基础方式1.2.自定义 SpringApplication1.3、FluentBuilder API 二、自定义Banner三、Profiles3.1 什么是 Profiles &#xff1f;3.2 声明Profiles3.3 激活配置文件3.3.1 分组3.3.2 环境包含3.3.3 激活方式3.3.4 配置优先级 一、Spri…

常用告警规则

Node_exporter告警规则 NodeCPUUsageHigh: yaml 复制代码 alert: NodeCPUUsageHigh expr: (100 - (avg by (instance) (rate(node_cpu_seconds_total{mode“idle”}[5m])) * 100)) > 80 for: 5m labels: severity: critical annotations: summary: “High CPU usage detec…