歷時五六個小時,又是百度谷歌,幫助手冊,入門教程什么一通查找,說是模塊其實也就一個文件不到兩百行代碼。
比想象中要順利,也學到了不少。
1,帶有滾動條的多行文本框
只要gtk_scrolled_window_new生成一個滾動窗口,在其上加上textview控件即可gtk_container_add,特點是當textview足夠顯示的時候,滾動條不可見,否則自動產生(垂直和橫向),而且也隨著輸入一起下滾顯示。這個暫不知道怎么設置。
GtkWidget *scroll = gtk_scrolled_window_new(NULL,NULL);
GtkWidget *textview = gtk_text_view_new();
gtk_container_add(GTK_CONTAINER(scroll),textview);
textview總是要與一個textbuffer關聯:
GtkTextBuffer *buffer = gtk_text_buffer_new(NULL);
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
2,控件焦點設置
gtk_widget_grab_focus,當entry控件使用時,會選中控件內輸入。
3,局部快捷鍵設置
GtkAccelGroup *group = gtk_accel_group_new();快捷鍵組?
gtk_window_add_accel_group(GTK_WINDOW(window),group);添加快捷鍵組到窗體
gtk_widget_add_accelerator(butQuery,"clicked",group,GDK_KEY_Return,(GdkModifierType)0,GTK_ACCEL_VISIBLE);快捷鍵注冊,其實就是當快捷鍵按下的時候,為控件觸發一個信號
(GdkModifierType)0為不使用修飾鍵
4,從glade文件添加控件,該控件是已經生成了的,只需用個指針接受對象
GtkBuilder *builder;
builder = gtk_builder_new();
gtk_builder_add_from_file(builder,"youdao.glade",NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder,"window"));
。。。
g_object_unref(G_OBJECT(builder));撤銷關聯?
5,選項卡控件(稱為notebook控件)
特點:notebook控件作為一個容器,每一個標簽頁用一個widget作為其標簽名,一個widget作為其標簽內容
添加一個標簽頁:gtk_notebook_append_page
注意:不能刪掉一個notebook控件的所有標簽頁(顯示的時候沒效果)
標簽頁的序號(使用gtk_notebook_get_nth_page獲得):
動態增減標簽頁的時候,標簽頁的序號似乎工作不正常。
最后使用的辦法是,使用gtk_noteboo_prepend_page向前添加,再使用-1參數gtk_notebook_remove_page從后逐個刪掉以替換掉之前的標簽頁。
應該有更好的方法吧?
刪掉一個標簽頁的時候,使用gtk_widget_queue_draw(GTK_WIDGET(noteBook));重畫控件,不太明白。
6,消息對話框(message dialog)
int ret;
GtkWidget *dialog;
dialog = gtk_message_dialog_new(GTK_WINDOW(window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_OK,
"%s",msg);
gtk_window_set_title(GTK_WINDOW(dialog),"Warning");
ret = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
特點:在gtk_dialog_run函數里堵塞,直到用戶關掉了對話框才返回,其返回值暫沒研究。
明天就可以開始感覺最具難度的html解析模塊的設計編寫了。
鍵盤昨晚吃了點八寶粥,有幾個鍵特別蛋疼的按了一天。
2011-11-15
7,關于.glade文件(2011-11-18)
今天才發現原因.glade文件是程序運行的時候才載入的。那是一個XML文件。
使用這個界面設計器還要裝上一個libglade2-0的庫。