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

第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两边有反引号括起来的
ruhongvnc@localhost:~/gtk4> gcc -g -Wallpkg-config --cflags gtk4page1154.cpkg-config --libs gtk4-o page1154

#include<stdlib.h>#include<gtk/gtk.h>staticinttime_interval=500;/* 定义全局变量time_interval并设定初始值为500 */staticgdouble increment=0.1;staticGtkWidget*entry1;staticvoidslow(void){time_interval=800;/* 改变全局变量time_interval的值为800 */}staticvoidmiddle(void){time_interval=500;}staticvoidquick(void){time_interval=200;}staticvoidcustom(void){constchar*text;GtkEntryBuffer*buffer;char*endptr=NULL;buffer=gtk_entry_get_buffer(GTK_ENTRY(entry1));text=gtk_entry_buffer_get_text(buffer);/* 获取用户在输入框entry1输入的数字内容,例如0.08,此时的数字内容是字符类型 */increment=strtod(text,&endptr);/* 字符类型的数字0.08是字符类型,转换为浮点数字0.08 */}staticgbooleanfill1(gpointer user_data){GtkWidget*progress_bar1=user_data;/* 获取当前进度条的值 */gdouble fraction1;fraction1=gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(progress_bar1));/* 每次调用此函数时,将进度条增加10%,标准写法是fraction = fraction + 0.1 缩写为+= 0.1*/fraction1+=increment;/* 根据fraction的值设定进度条显示的长度 */gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar1),fraction1);/* 确保进度条的值保持在1.0以下*/if(fraction1<1.0)returnTRUE;returnFALSE;}staticgbooleanfill2(gpointer user_data){GtkWidget*progress_bar2=user_data;/* 获取当前进度条的值 */gdouble fraction2;fraction2=gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(progress_bar2));/* 每次调用此函数时,将进度条增加10%,标准写法是fraction = fraction + 0.1 缩写为+= 0.1*/fraction2+=0.1;/* 确保进度条的值保持在1.0以下,让它无限循环*/if(fraction2>1.0)fraction2=0.0;/* 根据fraction的值设定进度条显示的长度 */gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar2),fraction2);/* 返回 TRUE,这样它就能够继续被调用 */returnTRUE;}staticvoidbegin(GtkWidget*widget,gpointer user_data){GtkWidget*progress_bar1=user_data;gdouble fraction1=0.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_bar2=user_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 fraction1=0.0;gdouble fraction2=0.5;/* 创建具有标题和默认大小的窗口 */window=gtk_application_window_new(app);gtk_window_set_title(GTK_WINDOW(window),"ProgressBar Example");gtk_window_set_default_size(GTK_WINDOW(window),500,200);grid=gtk_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表格水平居中,垂直居中 */check1=gtk_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);check2=gtk_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);check3=gtk_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);check4=gtk_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);entry1=gtk_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);label1=gtk_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_bar1=gtk_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));button1=gtk_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);label2=gtk_label_new("——————分隔线——————");gtk_grid_attach(GTK_GRID(grid),label2,0,3,4,1);label3=gtk_label_new("无限循环");//infinite loopgtk_grid_attach(GTK_GRID(grid),label3,0,4,4,1);progress_bar2=gtk_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));check5=gtk_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;app=gtk_application_new("org.gtk.example",G_APPLICATION_DEFAULT_FLAGS);g_signal_connect(app,"activate",G_CALLBACK(activate),NULL);status=g_application_run(G_APPLICATION(app),argc,argv);g_object_unref(app);returnstatus;}

效果图如下

http://www.gsyq.cn/news/1628862.html

相关文章:

  • 特斯拉Cybercab无方向盘路测曝光!20个月落地,成本优势能否弯道超车?
  • 告别手动刷课:智慧职教学习伴侣的30分钟高效学习法
  • 领域驱动设计实战--战略建模
  • 阿里70亿-90亿出售灵犀互娱,All in AI下游戏业务缘何成弃子?
  • SSL证书验证失败全解析:从原理到实战解决方案
  • 飞牛NAS安全实战:高危漏洞分析与应急响应指南
  • [特殊字符]《京东开放平台JOS接入全指南:注册、AppKey、OAuth2.0授权与沙箱调试(2026最新)》(附Python源码)
  • Java SpringBoot+Vue3+MyBatis 物业管理系统系统源码|前后端分离+MySQL数据库
  • Qwen2-7B本地轻量部署:喂饭级一键推理工作流
  • Markdown 语法完全指南:一篇学完全部语法
  • 靠谱的汽车保养排名
  • 心电自监督分类论文分享(1)-read your heart
  • 盘锦门窗窗纱一体防风要看哪里
  • 模型端侧适配技能之ONNX 模型拆分
  • Python+Django构建轻量级企业员工管理系统实战
  • EM3080-W条形码解码器与STM32F303RC的硬件协同设计
  • AI时代,为什么视频号作品数据和评论数据越来越重要?
  • USB3.0总线高速数据采集卡,8通道、16位分辨率、5MHz同步采样,程控增益±10V、±5V、±2V、±1V
  • 项目进度实时监控与资源优化:项目制服务解决方案落地方法论
  • 想提升企业资源管理效能?ERP系统优化是关键!
  • Qwen3vl+Midscene+Playwright自动化AI测试框架搭建流程(win11本地安装)
  • 2026淮北黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • 用GPT-5.5重构遗留项目:一套可复用的迁移脚本分享(附避坑指南与教程)
  • GPT高效落地实战:日常工作与学习任务优化全流程方法论
  • LENA-R8与PIC18LF45K22的全球连接与低功耗定位方案
  • 好用的平衡机创新机构
  • HoRain云--Java多线程编程:6种实战技巧与避坑指南
  • 你用AI写分析文,总觉得像拼凑的?问题不在AI,在流程
  • 互联网大厂 Java 求职面试:从 Java SE 8 到微服务技术的深入探讨
  • VSCode集成GPT-5.5教程:如何选择插件与我的效率配置盘点清单