首頁>技術>

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

}

執行結果:

46
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 史上最清晰的Tarjan演算法詳解