在多數程式中我們都可以看到進度條的應用,例如下載複製個檔案,下載個電影、播放音樂電影等。在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;
}
執行結果: