GTK常用控件之进度条( GtkProgressBar )

我们到处都能看到进度条的应用,我们下载拷贝个文件,下载个电影等总能看到进度条的影子,如图:


进度条的常用操作无非设置其比例或者获取其比例。


进度条的创建:
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>
#include <string.h>

// 回调函数,切换进度条的移动方向 
void toggle_orientation(GtkWidget *widget, gpointer data) 
{ 
	// gtk_progress_bar_get_orientation: 获得进度条当前移动的方向
	switch( gtk_progress_bar_get_orientation( GTK_PROGRESS_BAR(data) ) ){ 
	case GTK_PROGRESS_LEFT_TO_RIGHT: 
		gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(data), GTK_PROGRESS_RIGHT_TO_LEFT); 
		break; 
	case GTK_PROGRESS_RIGHT_TO_LEFT: 
		gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(data), GTK_PROGRESS_LEFT_TO_RIGHT); 
		break; 
	default: // 什么也不做 
		break;
	} 
} 

// 更新进度条,这样就能够看到进度条的移动
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[])
{
	gtk_init(&argc, &argv);		// 初始化

	GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);		// 创建主窗口
	gtk_window_set_title(GTK_WINDOW(window), "GtkProgressBar");		// 设置窗口标题
	gtk_container_set_border_width(GTK_CONTAINER(window), 10);		// 设置边框宽度

	// 设置窗口的最小大小
	gtk_widget_set_size_request(window, 300, 200);
	// 窗口关联 destroy 信号 到 gtk_main_quit
	g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

	GtkWidget *vbox = gtk_vbox_new(FALSE, 5);		 // 垂直布局容器
	gtk_container_add(GTK_CONTAINER(window), vbox);  // 容器加入窗口

	// 创建一个进度条
	GtkWidget *progress = gtk_progress_bar_new();
	gtk_container_add(GTK_CONTAINER(vbox), progress);  // 加入垂直布局容器
	// 设置进度条显示的百分比:50%
	gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), 0.5 ); 
	// 设置在进度条的滑槽上的文本显示 
	gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress), "some text");

	// 添加一个按钮,切换移动方向  
	GtkWidget *button_orientation = gtk_button_new_with_label("Right to Left"); 
	g_signal_connect(button_orientation, "clicked", G_CALLBACK(toggle_orientation), progress); 
	gtk_container_add(GTK_CONTAINER(vbox), button_orientation);  // 加入垂直布局容器

	// 增加进度条进度按钮
	GtkWidget *button = gtk_button_new_with_label("add");
	g_signal_connect(button, "clicked", G_CALLBACK(callback), progress); // connect
	gtk_container_add(GTK_CONTAINER(vbox), button);  // 加入垂直布局容器

	gtk_widget_show_all(window);

	gtk_main();			// 主事件循环

	return 0;
}


程序运行效果图如下:

GTK常用控件之进度条( GtkProgressBar )_第1张图片


源代码下载请点此处。

你可能感兴趣的:(进度条,基础教程,一步一步学习GTK+,GTK入门学习)