编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

用GTK+来创建一个带界面的C语言程序11——进度条

wxchong 2024-09-03 02:08:39 开源技术 11 ℃ 0 评论

在多数程序中我们都可以看到进度条的应用,例如下载拷贝个文件,下载个电影、播放音乐电影等。在GTK编程中GtkProgressBar就用于显示长时间运行的操作的进度。它提供了处理过程正在进行的视觉线索。GtkProgressBar可以在两种不同的模式中使用:百分比模式和活动模式。

当一个应用程序可以确定需要做多少工作(例如从文件中读取固定的字节数),并且可以监视它的进度,它可以在百分比模式下使用GtkProgressBar,用户可以看到一个正在增长的条,表示已经完成的工作的百分比。在这种模式下,应用程序需要定期调用gtk_progress_bar_set_fraction()来更新进度条。

当应用程序没有准确的方法来知道要做的工作量时,它可以在活动模式中使用GtkProgressBar,它通过一个在进度区域内来回移动的块来显示活动。在这种模式下,应用程序需要定期调用gtk_progress_bar_pulse()来更新进度条。

常用的关于进度条的函数主要有以下几个:

进度条的创建:

GtkWidget *gtk_progress_bar_new(void);

设置进度条显示的进度比例:

void gtk_progress_bar_set_fraction(GtkProgressBar *pbar, gdouble fraction);

pbar:需要操作的进度条

fraction:0.0到1.0

返回当前进度条显示的进度比例:

gdouble gtk_progress_bar_get_fraction (GtkProgressBar *pbar);

pbar:需要操作的进度条

返回值:进度比例

设置滑槽上的文本显示:

void gtk_progress_bar_set_text(GtkProgressBar *pbar, gchar *text);

pbar:需要操作的进度条

text:设置的文本内容

设置进度条的移动方向:

void gtk_progress_bar_set_orientation(GtkProgressBar *pbar, GtkProgressBarOrientation orientation);

pbar:需要操作的进度条

orientation:移动方向,它是一个枚举变量

GTK_PROGRESS_LEFT_TO_RIGHT:从左向右

GTK_PROGRESS_RIGHT_TO_LEFT:从右向左

GTK_PROGRESS_BOTTOM_TO_TOP:从下向上

GTK_PROGRESS_TOP_TO_BOTTOM:从上向下

获取进度条的方向:

GtkProgressBarOrientation gtk_progress_bar_get_orientation(GtkProgressBar *pbar);

pbar:需要操作的进度条

返回值:进度条的方向,它是一个枚举类型

#include<gtk/gtk.h>

// 更新进度条,这样就能够看到进度条的移动

void callback(GtkWidget *widget, gpointer data)

{

// 在原来值基础上增加 0.05

gdouble new_val = gtk_progress_bar_get_fraction( GTK_PROGRESS_BAR(data) ) + 0.05;

if(new_val > 1.0){ // 越界处理

new_val = 0.0;

}

// 设置进度条的新值

gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(data), new_val);

}


int main(int argc, char *argv[])

{

GtkWidget * window;

GtkWidget * box;

GtkWidget * pbar;


gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

gtk_window_set_default_size(GTK_WINDOW(window), 500, 400);

gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

gtk_window_set_title(GTK_WINDOW(window), "测试代码");


box=gtk_box_new(GTK_ORIENTATION_VERTICAL,0);

gtk_container_add(GTK_CONTAINER(window),box);

pbar=gtk_progress_bar_new();

gtk_box_pack_start(GTK_BOX(box),pbar,FALSE,FALSE,0);

// 设置进度条显示的百分比:50%

gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pbar), 0.1 );

// 设置在进度条的滑槽上的文本显示

gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pbar), "some text");


// 增加进度条进度按钮

GtkWidget *button = gtk_button_new_with_label("add");

g_signal_connect(button, "clicked", G_CALLBACK(callback), pbar); // connect

gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0); // 加入垂直布局容器

gtk_widget_show_all(window);


gtk_main();

return 0;

}

运行结果:

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表