精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

GTK構件之雜項構件(2)

嵌入式技術 ? 來源:嵌入式技術 ? 作者:嵌入式技術 ? 2022-11-27 07:53 ? 次閱讀

1.進度條progress bar

??進度條用于顯示正在進行的操作的狀態。創建進度條函數如下:

GtkWidget*gtk_progress_bar_new (void)

??創建進度條成功后,即可使用以下函數設置進度條顯示比例和獲取進度條百分比。

/*獲取進度條百分比*/
gdouble gtk_progress_bar_get_fraction (GtkProgressBar *pbar)
/*設置進度條百分比*/
void gtk_progress_bar_set_fraction (GtkProgressBar *pbar,gdouble fraction)
參數:fraction為進度條比例,取值范圍為0.0~1.0

??GTK 1.2 版已經給進度條添加了一個新的功能,那就是允許它以不同的方法顯示其值,并通知用戶它的當前值和范圍。進度條可以用以下函數設置它的移動方向:

/*設置進度條移動方向*/
void gtk_progress_bar_set_orientation (GtkProgressBar *pbar, GtkOrientation  orientation)
orientation可填以下參數:
GTK_PROGRESS_LEFT_TO_RIGHT 從左向右
GTK_PROGRESS_RIGHT_TO_LEFT 從右向左
GTK_PROGRESS_BOTTOM_TO_TOP 從下向上
GTK_PROGRESS_TOP_TO_BOTTOM 從上向下
/*獲取進度條移動方向*/
int gtk_progress_bar_get_orientation(GtkProgressBar *pbar, GtkOrientation)

??除了指示進度已經發生的數量以外, 進度條還可以設置為僅僅指示有活動在繼續,即活動狀態。這在進度無法按數值度量的情況下很有用。用下面的函數來表明進度有了些進展。

//設置活動的比例
void gtk_progress_bar_set_pulse_step (GtkProgressBar *pbar,gdouble  fraction)
void gtk_progress_bar_pulse (GtkProgressBar *pbar)

2.進度條示例

pYYBAGOCpwGAM59BAABOiGf4t0c927.png#pic_center

#include 
#include 
#define TOGGLE_SHOW 1 //文本顯示
#define TOGGLE_DIRECTION 2 //方向按鈕
#define TOGGLE_ACTIVE 3 //激活按鈕
typedef struct
{
	GtkWidget *window;/*窗口*/
	GtkWidget *pbar;/*進度條*/
	gint timer;/*定時器標志*/
	gint bar_active;
	gint bar_show_stat;//進度條文本顯示標志
}gtk_progress;
gtk_progress *pdata=NULL;

/*窗口關閉處理函數*/
void window_destroy_callback(GtkWidget *widget,gpointer data)
{
	/*銷毀定時器*/
	gtk_timeout_remove(pdata->timer);
	pdata->timer=0;
	pdata->window=NULL;
	g_free(pdata);//釋放資源
	/*銷毀窗口*/
	gtk_main_quit();

}
/*定時器超時處理函數*/
gboolean progress_timeout(gpointer data)
{
	gtk_progress *pdata=(gtk_progress *)data;
	gdouble new_val;
	gchar buff[20];
	if(pdata->bar_active)//暫停進度條
	{
		gtk_progress_bar_pulse(GTK_PROGRESS_BAR (pdata->pbar));
		return TRUE;//返回TRUE表示可以繼續調用
	}
	new_val=gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR (pdata->pbar));//獲取進度條數值
	new_val+=0.01;
	if(new_val>1.0)new_val=0.0;
	if(pdata->bar_show_stat)
	{
		snprintf(buff,sizeof(buff),"百分比:%d %%",(gint)(new_val*100));
		gtk_progress_bar_set_text (GTK_PROGRESS_BAR (pdata->pbar), buff);//設置進度條文本
	}
	gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR (pdata->pbar),new_val);//設置進度條值
	return TRUE;
}
/*按鈕處理函數*/
void check_button_callback(GtkWidget *widget,gpointer data)
{
	gint flag=(gpointer)data;
	/*獲取按鈕狀態*/
	if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
	{
		switch(flag)
		{
			case TOGGLE_SHOW:
				pdata->bar_show_stat=1;//顯示文本
			break;
			case TOGGLE_DIRECTION://設置進度條方向為從左往右
				gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR (pdata->pbar), GTK_PROGRESS_RIGHT_TO_LEFT);
			break;
			case TOGGLE_ACTIVE:
				pdata->bar_active=1;//暫停進度條
				//gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR (pdata->pbar),0.5);//設置活動的比例
				gtk_progress_bar_pulse(GTK_PROGRESS_BAR (pdata->pbar));
				break;
		}
	}
	else
	{
		switch(flag)
		{
			case TOGGLE_SHOW:
				pdata->bar_show_stat=0;//取消顯示
				gtk_progress_bar_set_text (GTK_PROGRESS_BAR (pdata->pbar), NULL);//取消文本
			break;
			case TOGGLE_DIRECTION:
				gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR (pdata->pbar), GTK_PROGRESS_LEFT_TO_RIGHT);//設置進度條方向為從左往右
			break;
			case TOGGLE_ACTIVE:
				pdata->bar_active=0;//恢復進度條
				break;
		}
	}
}

int main(int argc,char *argv[])
{
	GtkWidget *box;
	GtkWidget *alignment;/*對齊構件*/
	GtkWidget *separate;/*分割線*/
	GtkWidget  *table; 
	GtkWidget *button;
	pdata=g_malloc(sizeof(gtk_progress));
	gtk_init(&argc,&argv);
	/*創建窗口*/
	pdata->window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(pdata->window), "GTK PRO_BAR");
	/*設置邊框寬度*/
	gtk_container_set_border_width(GTK_CONTAINER(pdata->window), 2);
	/*設置窗口大小是否可以調整*/
	gtk_window_set_resizable(GTK_WINDOW(pdata->window),TRUE);
	/*關聯信號*/
	g_signal_connect(G_OBJECT(pdata->window),"destroy", G_CALLBACK(window_destroy_callback),NULL);

	/*創建一個縱向盒*/
	box=gtk_vbox_new(FALSE,5);
	/*將縱向盒放到窗口中*/
	gtk_container_add(GTK_CONTAINER(pdata->window),box);
	gtk_widget_show(box);

	/*創建對齊構件*/
	alignment=gtk_alignment_new(0.5, 0.5, 0.8, 1);
	/*將對齊構件放入縱向盒中*/
	gtk_box_pack_start(GTK_BOX(box),alignment,FALSE,FALSE, 2);
	gtk_widget_show(alignment);

	/*創建進度條*/
	pdata->pbar=gtk_progress_bar_new();
	/*將進度條放入到對齊構件中*/
	gtk_container_add(GTK_CONTAINER(alignment), pdata->pbar);
	gtk_widget_show(pdata->pbar);

	/*
		添加定時器,用戶修改進度條的值
			100 --毫秒單位,表示100ms鐘觸發調用一次progress_timeout
	*/
	pdata->timer=gtk_timeout_add(100,progress_timeout,pdata);

	/*創建水平分割線*/
	separate=gtk_hseparator_new();
	gtk_box_pack_start(GTK_BOX(box),separate, FALSE,FALSE,0);
	gtk_widget_show(separate);

	/*創建2行2列組裝表*/
	table=gtk_table_new(2,2,FALSE);
	gtk_box_pack_start(GTK_BOX(box),table, FALSE,TRUE,0);
	gtk_widget_show(table);

	/*創建復選按鈕,用于選擇進度條文本顯示*/
	button=gtk_check_button_new_with_label("顯示文本");
	/*將按鈕放入組裝表中*/
	gtk_table_attach_defaults (GTK_TABLE(table),button,0,1,0,1);
	g_signal_connect(GTK_OBJECT(button),"toggled",G_CALLBACK(check_button_callback), (gpointer)TOGGLE_SHOW);
	gtk_widget_show(button);
	
	/*創建復選按鈕,用于調節進度條方向*/
	button=gtk_check_button_new_with_label("方向顯示");
	gtk_table_attach_defaults (GTK_TABLE(table),button,0,1,1,2);
	g_signal_connect(GTK_OBJECT(button),"toggled",G_CALLBACK(check_button_callback), (gpointer)TOGGLE_DIRECTION);
	gtk_widget_show(button);
	/*創建復選按鈕,用于調節進度條激活和關閉*/
	button=gtk_check_button_new_with_label("暫停加載");
	gtk_table_attach_defaults (GTK_TABLE(table),button,0,1,2,3);
	g_signal_connect(GTK_OBJECT(button),"toggled",G_CALLBACK(check_button_callback), (gpointer)TOGGLE_ACTIVE);
	gtk_widget_show(button);

	/*添加分割線*/
	separate=gtk_hseparator_new();
	gtk_box_pack_start(GTK_BOX(box),separate, FALSE,FALSE,0);
	gtk_widget_show(separate);	

	/*創建按鈕,用于退出程序*/
	button=gtk_button_new_from_stock(GTK_STOCK_QUIT);
	gtk_box_pack_start(GTK_BOX(box),button,FALSE,TRUE,0);
	g_signal_connect(GTK_OBJECT(button),"clicked",G_CALLBACK(window_destroy_callback),NULL);
	gtk_widget_show(button);	
	gtk_widget_show(pdata->window);
	gtk_main();
	return 0;
}

3.對話框 Dialogs

??對話構件非常簡單,事實上它僅僅是一個預先組裝了幾個構件到里面的窗口。對話框的數據結構是:

struct GtkDialog
{
GtkWindow window;
GtkWidget *vbox;  //縱向盒
GtkWidget *action_area; //橫向盒
};

? 從上面可以看到, 對話框只是簡單地創建一個窗口,并在頂部組裝一個縱向盒(vbox),然后在這個縱向盒中組裝一個分隔線(separator),再加一個稱為“活動區(action_area)”的橫向盒(hbox)。

對話框構件可以用于彈出消息,或者其它類似的任務。這里有兩個函數來創建一個新的對話框。

/*創建對話框*/
GtkWidget*gtk_dialog_new (void)
/*創建對話框,可設置多個參數*/
GtkWidget*gtk_dialog_new_with_buttons (const gchar    *title,
                             GtkWindow      *parent,
                             GtkDialogFlags  flags,
                             const gchar    *first_button_text,
                             ...)
形參:title  --對話框標題
      parent  --所屬父窗口
      flags   --對話框屬性,可填下列一個或多個屬性
GTK_DIALOG_MODAL  使對話框使用獨占模式。 
GTK_DIALOG_DESTROY_WITH_PARENTS保證對話框在指定父窗口被關閉時也一起關閉。 
GTK_DIALOG_NO_SEPARATOR  省略縱向盒與活動區之間的分隔線 
     first_button_text  --第一個按鈕字符文本

4.dialog示例

poYBAGOCpwGAVjsGAABIz7zRUHg493.png#pic_center

#include 
#include 
GtkWidget *dialog;
GtkWidget *window;

/*按鍵處理回調函數*/
void button_clicked_callback(GtkWidget *widget,gpointer data)
{
	char *pada=(gchar *)data;
	if(!strcmp(pada,"on"))
	{
		gtk_widget_destroy(dialog);//關閉對話框
	}
	if(!strcmp(pada,"ok"))
	{
		gtk_main_quit();
	}
}
/*窗口按鈕處理回調函數*/
void button_callback(GtkWidget *widget,gpointer data)
{
	GtkWidget *label;
	GtkWidget *button;
	GtkWidget *table;
	#if 0
	dialog=gtk_dialog_new();//創建對話框
	gtk_window_set_title(GTK_WINDOW(dialog),"是否退出");
	#endif
	/*創建對話框,設置對話框模式為獨占*/
	dialog=gtk_dialog_new_with_buttons("是否退出",GTK_WINDOW(window),GTK_DIALOG_MODAL,NULL);
	/*創建標簽*/
	label=gtk_label_new("是否退出?");
	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),label,TRUE, TRUE,0);
	gtk_widget_show(label);

	/*創建組裝表*/
	table=gtk_table_new(1,0,FALSE);
	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area),table,FALSE, FALSE, 0);
	/*創建按鈕*/
	button=gtk_button_new_from_stock(GTK_STOCK_NO);
	gtk_table_attach_defaults(GTK_TABLE(table),button,0,1,0,1);
	gtk_widget_show(button);
	g_signal_connect(GTK_OBJECT(button),"clicked",G_CALLBACK(button_clicked_callback),"on");
	/*創建按鈕*/
	button=gtk_button_new_from_stock(GTK_STOCK_OK);
	gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,0,1);
	g_signal_connect(GTK_OBJECT(button),"clicked",G_CALLBACK(button_clicked_callback),"ok");
	gtk_widget_show(button);
	gtk_widget_show(table);
	gtk_widget_show(dialog);
	
}
int main(int argc,char **argv)
{
	
	GtkWidget *table;
	GtkWidget *button;
	gtk_init(&argc,&argv);
	/*創建窗口*/
	window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),"GTK");
	gtk_container_set_border_width(GTK_CONTAINER(window), 5);
	gtk_widget_set_usize(window, 200, 200);
	g_signal_connect(GTK_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit), NULL);
	
	/*創建組裝表*/
	table=gtk_table_new(3,4,TRUE);
	gtk_container_add(GTK_CONTAINER(window),table);
	/*創建按鈕*/
	button=gtk_button_new_with_label("關閉");
	gtk_table_attach_defaults(GTK_TABLE(table),button,1,3,1,2);
	g_signal_connect(GTK_OBJECT(button),"clicked",G_CALLBACK(button_callback), NULL);

	gtk_widget_show(button);
	gtk_widget_show(table);
	gtk_widget_show(window);
	gtk_main();
	return 0;
	
}

審核編輯黃昊宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關推薦

    GTK+ 2.0 教程

    滾動條構件 Scrollbar Widgets比例構件 Scale Widgets創建一個比例構件函數和信號(至少講了函數)常用的范圍函數設置更新方式獲得和設置調整對象鍵盤和鼠標綁定示例雜項
    發表于 10-21 17:17

    面向無線傳感網絡的構件化開發方法

    層的集成化操作基本是一樣的,圖2 是CC2420系統集成構件調用硬件抽象層構件的關系。圖2 系統集成構件和硬件抽象層
    發表于 11-02 15:43

    嵌入式硬件構件與底層驅動構件相關資料推薦

    慕課蘇州大學.嵌入式開發及應用.第二章.入門與軟件框架.嵌入式硬件構件與底層驅動構件基本規范0 目錄2 入門與軟件框架2.1 嵌入式硬件構件與底層驅動
    發表于 10-27 07:05

    嵌入式硬件構件與底層驅動構件

    嵌入式硬件構件與底層驅動構件基本規范構件化設計嵌入式硬件構件核心構件中間構件終端
    發表于 10-27 09:01

    構件方法進行GPIO應用編程

    慕課蘇州大學.嵌入式開發及應用.第二章.入門與軟件框架.用構件方法進行GPIO應用編程0 目錄2 入門與軟件框架2.3 用構件方法進行GPIO應用編程2.3.1 課堂重點2.3.2 測試與作業3 下一章0 目錄
    發表于 11-08 07:35

    UART驅動構件的設計方法

    慕課蘇州大學.嵌入式開發及應用.第二章.入門與軟件框架.UART驅動構件的設計方法0 目錄2 入門與軟件框架2.1 UART驅動構件的設計方法2.1.1 課堂重點2.1.2 測試與作業3 下一章0
    發表于 11-08 07:50

    GPIO構件封裝方法與規范

    文章目錄1、GPIO構件封裝方法與規范2、利用構件方法控制小燈閃爍3、工程文件組織框架與第一個C語言工程分析1、GPIO構件封裝方法與規范構件
    發表于 11-08 06:58

    Flash在線編程構件的使用

    慕課蘇州大學.嵌入式開發及應用.第三章.基本模塊.Flash在線編程構件的使用0 目錄3 基本模塊3.7 Flash在線編程構件的使用3.7.1 課堂重點3.7.2 測試與作業4 下一章0 目錄3
    發表于 12-20 07:41

    FLASH在線編程構件的設計方法

    慕課蘇州大學.嵌入式開發及應用.第三章.基本模塊.FLASH在線編程構件的設計方法0 目錄3 基本模塊3.8 FLASH在線編程構件的設計方法3.8.1 課堂重點3.8.2 測試與作業4 下一章0
    發表于 12-20 07:57

    構件內聚性度量方法研究

    構件的內聚性度量是衡量構件質量的一個重要指標。度量構件內聚度的經典方法程序切片,由于切片劃分的不同,其度量值不同。本文不僅很好地度量構件的內聚度且度量值唯一。
    發表于 01-09 11:58 ?7次下載

    基于GTK+的組合構件設計

    基于GTK+的組合構件設計 圖形用戶界面是用戶與儀器的唯一交互方式,也是整個嵌入式系統一個尤為重要的方面。GTK+即是一個應用于嵌入式圖形界面開發的良好圖形庫。在
    發表于 10-15 08:55 ?761次閱讀
    基于<b class='flag-5'>GTK</b>+的組合<b class='flag-5'>構件</b>設計

    慕課嵌入式開發及應用(第二章.嵌入式硬件構件與底層驅動構件基本規范)

    慕課蘇州大學.嵌入式開發及應用.第二章.入門與軟件框架.嵌入式硬件構件與底層驅動構件基本規范0 目錄2 入門與軟件框架2.1 嵌入式硬件構件與底層驅動
    發表于 10-19 18:33 ?8次下載
    慕課嵌入式開發及應用(第二章.嵌入式硬件<b class='flag-5'>構件</b>與底層驅動<b class='flag-5'>構件</b>基本規范)

    嵌入式硬件構件與底層驅動構件基本規范

    嵌入式硬件構件與底層驅動構件基本規范構件化設計嵌入式硬件構件核心構件中間構件終端
    發表于 10-20 13:36 ?6次下載
    嵌入式硬件<b class='flag-5'>構件</b>與底層驅動<b class='flag-5'>構件</b>基本規范

    GTK構件雜項構件

    ??標簽(Labels)是GTK中最常用的構件,實際上它很簡單。因為沒有相關聯的X窗口,標簽不能引發信號。如果需要獲取或引發信號,可以將它放在一個事件盒中,或放在按鈕構件里面。
    的頭像 發表于 11-25 10:20 ?815次閱讀
    <b class='flag-5'>GTK</b><b class='flag-5'>構件</b><b class='flag-5'>之</b><b class='flag-5'>雜項</b><b class='flag-5'>構件</b>

    GTK構件微調按鈕

    ? 微調按鈕(Spin Button)構件通常用于讓用戶從一個取值范圍你選擇一個值。它由一個文本輸入框和旁邊的向上和向下兩個按鈕組成。點擊某一個按鈕會讓文本輸入框里的數值大小在一定范圍你改變。文本輸入框里也可以直接輸入一個特定值。
    的頭像 發表于 11-30 09:50 ?1232次閱讀
    <b class='flag-5'>GTK</b><b class='flag-5'>構件</b><b class='flag-5'>之</b>微調按鈕