第115页的gtk+编程例子——进度条改写网上的例子用gtk4编译

发布时间:2026/7/11 14:39:31

第115页的gtk+编程例子——进度条改写网上的例子用gtk4编译
第115页的gtk编程例子——进度条改写网上的例子用gtk4编译主要是参考网络《GTK 2.0 中文教程》中进度条 Progress Bars的例子程序源代码出处是http://www.huzheng.org/ebook/gtk2-tut/x892.html第115页的gtk编程例子——最简单的进度条2附带使用Anjuta写gtk程序的步骤https://blog.csdn.net/weixin_42145772/article/details/125022694在openSUSE-Leap-15.6-DVD-x86_64的gnome45.3桌面环境下编译的其中pkg-config --cflags gtk4两边有反引号括起来的ruhongvnclocalhost:~/gtk4 gcc -g -Wallpkg-config --cflags gtk4page1154.cpkg-config --libs gtk4-o page1154#includestdlib.h#includegtk/gtk.hstaticinttime_interval500;/* 定义全局变量time_interval并设定初始值为500 */staticgdouble increment0.1;staticGtkWidget*entry1;staticvoidslow(void){time_interval800;/* 改变全局变量time_interval的值为800 */}staticvoidmiddle(void){time_interval500;}staticvoidquick(void){time_interval200;}staticvoidcustom(void){constchar*text;GtkEntryBuffer*buffer;char*endptrNULL;buffergtk_entry_get_buffer(GTK_ENTRY(entry1));textgtk_entry_buffer_get_text(buffer);/* 获取用户在输入框entry1输入的数字内容例如0.08此时的数字内容是字符类型 */incrementstrtod(text,endptr);/* 字符类型的数字0.08是字符类型转换为浮点数字0.08 */}staticgbooleanfill1(gpointer user_data){GtkWidget*progress_bar1user_data;/* 获取当前进度条的值 */gdouble fraction1;fraction1gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(progress_bar1));/* 每次调用此函数时将进度条增加10%标准写法是fraction fraction 0.1 缩写为 0.1*/fraction1increment;/* 根据fraction的值设定进度条显示的长度 */gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar1),fraction1);/* 确保进度条的值保持在1.0以下*/if(fraction11.0)returnTRUE;returnFALSE;}staticgbooleanfill2(gpointer user_data){GtkWidget*progress_bar2user_data;/* 获取当前进度条的值 */gdouble fraction2;fraction2gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(progress_bar2));/* 每次调用此函数时将进度条增加10%标准写法是fraction fraction 0.1 缩写为 0.1*/fraction20.1;/* 确保进度条的值保持在1.0以下让它无限循环*/if(fraction21.0)fraction20.0;/* 根据fraction的值设定进度条显示的长度 */gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar2),fraction2);/* 返回 TRUE,这样它就能够继续被调用 */returnTRUE;}staticvoidbegin(GtkWidget*widget,gpointer user_data){GtkWidget*progress_bar1user_data;gdouble fraction10.0;gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar1),fraction1);g_timeout_add(time_interval,fill1,GTK_PROGRESS_BAR(progress_bar1));g_print(time_interval is: %d\n,time_interval);//用来调试程序在命令行下观察time_interval的值变化g_print(increment is: %f\n,increment);//用来调试程序在命令行下观察increment的值变化}staticvoidtoggle_orientation(GtkWidget*widget,gpointer user_data){GtkWidget*progress_bar2user_data;switch(gtk_progress_bar_get_inverted(GTK_PROGRESS_BAR(progress_bar2))){caseFALSE:gtk_progress_bar_set_inverted(GTK_PROGRESS_BAR(progress_bar2),TRUE);break;caseTRUE:gtk_progress_bar_set_inverted(GTK_PROGRESS_BAR(progress_bar2),FALSE);break;default:;// 什么也不做}}staticvoidactivate(GtkApplication*app,gpointer user_data){GtkWidget*window;GtkWidget*grid;GtkWidget*check1,*check2,*check3,*check4,*check5;GtkWidget*progress_bar1;GtkWidget*button1;//GtkWidget *hseparator;GtkWidget*label1,*label2,*label3;GtkWidget*progress_bar2;gdouble fraction10.0;gdouble fraction20.5;/* 创建具有标题和默认大小的窗口 */windowgtk_application_window_new(app);gtk_window_set_title(GTK_WINDOW(window),ProgressBar Example);gtk_window_set_default_size(GTK_WINDOW(window),500,200);gridgtk_grid_new();gtk_window_set_child(GTK_WINDOW(window),grid);gtk_widget_set_halign(grid,GTK_ALIGN_CENTER);gtk_widget_set_valign(grid,GTK_ALIGN_CENTER);/* 设置grid表格水平居中垂直居中 */check1gtk_check_button_new_with_label(慢);gtk_grid_attach(GTK_GRID(grid),check1,0,0,1,1);g_signal_connect(G_OBJECT(check1),toggled,G_CALLBACK(slow),NULL);check2gtk_check_button_new_with_label(中);gtk_check_button_set_group(GTK_CHECK_BUTTON(check2),GTK_CHECK_BUTTON(check1));/* 将三个按钮联系在一起实现三个中只能选择其中一个有效 */gtk_check_button_set_active(GTK_CHECK_BUTTON(check2),TRUE);gtk_grid_attach(GTK_GRID(grid),check2,1,0,1,1);g_signal_connect(G_OBJECT(check2),toggled,G_CALLBACK(middle),NULL);check3gtk_check_button_new_with_label(快);gtk_check_button_set_group(GTK_CHECK_BUTTON(check3),GTK_CHECK_BUTTON(check1));gtk_grid_attach(GTK_GRID(grid),check3,2,0,1,1);g_signal_connect(G_OBJECT(check3),toggled,G_CALLBACK(quick),NULL);check4gtk_check_button_new_with_label(自定义);gtk_grid_attach(GTK_GRID(grid),check4,3,0,1,1);g_signal_connect(G_OBJECT(check4),toggled,G_CALLBACK(custom),NULL);entry1gtk_entry_new();gtk_entry_set_placeholder_text(GTK_ENTRY(entry1),0.01-0.30);/* 在输入框中提示输入的数字范围 */gtk_entry_set_input_purpose(GTK_ENTRY(entry1),GTK_INPUT_PURPOSE_NUMBER);/* 在输入框中限制只能输入数字和小数点 */gtk_grid_attach(GTK_GRID(grid),entry1,4,0,1,1);label1gtk_label_new(先选择慢中快先输入数字再勾选自定义再点击开始);//First select slow, medium, or fast, then enter the number and check the custom option before clicking startgtk_grid_attach(GTK_GRID(grid),label1,0,1,4,1);/* 创建进度条并将其添加到窗口 */progress_bar1gtk_progress_bar_new();gtk_grid_attach(GTK_GRID(grid),progress_bar1,0,2,4,1);gtk_widget_set_valign(progress_bar1,GTK_ALIGN_CENTER);/* 设置进度条垂直居中 *//* 根据fraction的值设定进度条显示的长度进度条的值必须介于0.0-1.0含0.0-1.0之间*/gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar1),fraction1);/* 每隔500毫秒运行一次fill函数 */g_timeout_add(500,fill1,GTK_PROGRESS_BAR(progress_bar1));button1gtk_button_new_with_label(开始);gtk_grid_attach(GTK_GRID(grid),button1,4,2,1,1);g_signal_connect(G_OBJECT(button1),clicked,G_CALLBACK(begin),progress_bar1);//hseparator gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);//gtk_grid_attach (GTK_GRID (grid), hseparator, 0, 1, 4, 1);label2gtk_label_new(——————分隔线——————);gtk_grid_attach(GTK_GRID(grid),label2,0,3,4,1);label3gtk_label_new(无限循环);//infinite loopgtk_grid_attach(GTK_GRID(grid),label3,0,4,4,1);progress_bar2gtk_progress_bar_new();gtk_grid_attach(GTK_GRID(grid),progress_bar2,0,5,4,1);gtk_widget_set_valign(progress_bar2,GTK_ALIGN_CENTER);/* 设置进度条垂直居中 */gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar2),fraction2);g_timeout_add(300,fill2,GTK_PROGRESS_BAR(progress_bar2));check5gtk_check_button_new_with_label(反方向);//opposite directiongtk_grid_attach(GTK_GRID(grid),check5,4,5,1,1);g_signal_connect(G_OBJECT(check5),toggled,G_CALLBACK(toggle_orientation),progress_bar2);gtk_window_present(GTK_WINDOW(window));}intmain(intargc,char**argv){GtkApplication*app;intstatus;appgtk_application_new(org.gtk.example,G_APPLICATION_DEFAULT_FLAGS);g_signal_connect(app,activate,G_CALLBACK(activate),NULL);statusg_application_run(G_APPLICATION(app),argc,argv);g_object_unref(app);returnstatus;}效果图如下

相关新闻

如何用DevToysMac提升macOS开发效率:完整的全能工具箱指南

如何用DevToysMac提升macOS开发效率:完整的全能工具箱指南

2026/7/10 17:35:08

如何用DevToysMac提升macOS开发效率:完整的全能工具箱指南 【免费下载链接】DevToysMac DevToys For mac 项目地址: https://gitcode.com/gh_mirrors/de/DevToysMac 你是否厌倦了在多个工具之间来回切换,只为完成一些看似简单却频繁出现的开发任务…

4-20mA电流环原理与INA196工业级接收器设计

4-20mA电流环原理与INA196工业级接收器设计

2026/7/10 16:15:10

1. 4-20mA电流环基础与行业应用在工业自动化领域,4-20mA电流环传输标准已经存在超过60年,至今仍是过程控制系统中模拟信号传输的黄金标准。这种双线制传输方式之所以经久不衰,主要得益于其独特的物理特性:电流信号在长距离传输时不…

如何精准识别区域内的技术短板与创新潜力?

如何精准识别区域内的技术短板与创新潜力?

2026/7/8 6:50:56

观点作者:科易网-国家科技成果转化(厦门)示范基地 核心要点 精准识别区域技术短板需构建全域科创知识图谱,以数智化工具实现资源底数清、需求精准挖、对接高效达、成果价值显。高校院所需通过知识图谱与技术评估工具盘活“沉睡”成…

怎样快速下载网页视频:免费开源插件VideoDownloadHelper的完整指南

怎样快速下载网页视频:免费开源插件VideoDownloadHelper的完整指南

2026/7/11 14:32:59

怎样快速下载网页视频:免费开源插件VideoDownloadHelper的完整指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否遇到过这…

GitHub Desktop汉化终极指南:3分钟实现中文界面自由

GitHub Desktop汉化终极指南:3分钟实现中文界面自由

2026/7/11 14:32:59

GitHub Desktop汉化终极指南:3分钟实现中文界面自由 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 【GitHub桌面客户端中文汉化】 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 还在为GitHub Desktop的…

GitHub Desktop汉化终极指南:5分钟让Git客户端变中文

GitHub Desktop汉化终极指南:5分钟让Git客户端变中文

2026/7/11 14:32:59

GitHub Desktop汉化终极指南:5分钟让Git客户端变中文 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 【GitHub桌面客户端中文汉化】 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 还在为GitHub Desktop的…

Unblob:终极二进制容器文件解析工具完全指南

Unblob:终极二进制容器文件解析工具完全指南

2026/7/11 14:32:59

Unblob:终极二进制容器文件解析工具完全指南 【免费下载链接】unblob Extract files from any kind of container formats 项目地址: https://gitcode.com/gh_mirrors/un/unblob 在数字取证、固件分析和逆向工程领域,处理复杂的二进制容器文件一直…

arXiv热点论文:3B/7B小模型在医疗事实核查中反超GPT-4o/GPT-5

arXiv热点论文:3B/7B小模型在医疗事实核查中反超GPT-4o/GPT-5

2026/7/11 14:32:59

开篇总结 这篇论文是一项针对生物医药领域断言验证(Claim Verification)的突破性研究 。作者通过 QLoRA 技术微调了 Phi-3、Qwen2.5 和 Mistral 等 3B 到 7B 的轻量级开源大模型 ,结果发现,仅用 1008 条训练样本,7B 小…

5大核心功能解密:digiCamControl如何让你的DSLR相机变身智能工作站

5大核心功能解密:digiCamControl如何让你的DSLR相机变身智能工作站

2026/7/11 14:22:59

5大核心功能解密:digiCamControl如何让你的DSLR相机变身智能工作站 【免费下载链接】digiCamControl DSLR camera remote control open source software 项目地址: https://gitcode.com/gh_mirrors/di/digiCamControl 你是否曾经在拍摄产品静物时&#xff0c…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/10 22:32:48

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/10 6:57:56

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

2026/7/11 0:02:03

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 在数字隐私日益重要的今天,微信聊天记录作为个人数字资产的重要组成…

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

2026/7/11 0:02:03

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载…

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

2026/7/11 0:02:03

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案 一、数据库备份最容易被忽略的问题,不是「有没有做备份」,而是「备份能不能恢复、恢复要多久、以及恢复后的数据对不对」 很多团队做数据库备份的方式是「写个 cron job&am…