gtk/glade程序开发(三)

菜单构件(menu)

  这一节我们是这样设计的:单击主窗口 菜单“文件”下的“打开”子菜单,会弹出一个新窗口。
  菜单构件的使用比较简单,只要设计好后,在callbacks.c文件中找到“相应菜单”对应的“函数”,
在里面添加代码就可以了。
   我们设计的主菜单有两项,“文件”和“编辑”。“文件”下有:“打开”、“保存”。“编辑”下有:“拷贝”、“粘贴”。

创建菜单构件:
/* 创建菜单构件要用到较多的函数,所辛,Glade会自动生成代码。我们不用管它了*/

这一节用到的新函数:



一、用Glade设计界面
步骤:  1、新建glade工程
     2、依此放置 窗口(400,300)、固定位置、菜单构件。
     3、选中菜单构件,然后在“属性”面版中,单击“编辑菜单”按钮,编辑菜单。
     4、编辑菜单时主意:菜单的标签可以使用汉字,菜单的名子要使用英文,否则生成的代码中,
      你根本就看不出谁是谁。  
     5、在工程中,再放置一个窗口构件,在新窗口上放置标签,label属性是“window2”。
     6、保存工程,并生成代码。

二、修改代码


callbacks.h /**/



void  on_open1_activate (GtkMenuItem *menuitem,

gpointer user_data);



void  on_save1_activate (GtkMenuItem *menuitem,

gpointer user_data);

void  on_copy1_activate (GtkMenuItem *menuitem,

gpointer user_data);



void  on_pause1_activate (GtkMenuItem *menuitem,

gpointer user_data);



callbacks.c



void on_open1_activate (GtkMenuItem *menuitem,

gpointer user_data)

{

GtkWidget *window2;

window2 = create_window2 ();

gtk_widget_show (window2);

}



void on_save1_activate (GtkMenuItem *menuitem,

gpointer user_data)

{

}



void on_copy1_activate (GtkMenuItem *menuitem,

gpointer user_data)

{

}



void on_pause1_activate (GtkMenuItem *menuitem,

gpointer user_data)

{

}
对范围构件的原代码做一些修复.
interface.c
将 /* GtkWidget *all_label1;*/ 的注释去掉.

callbacks.h
将 GtkWidget *all_label1; 删除.

callbacks.c
在函数 on_hscrollbar1_value_changed 里加上下面一句代码,加在第一行.
GtkWidget *all_label1 = lookup_widget (GTK_WIDGET(range), "all_label1");

在函数 on_vscrollbar1_value_changed 里加上下面一句代码,加在第一行.
GtkWidget *all_label1 = lookup_widget (GTK_WIDGET(range), "all_label1");

这样就可以了.


TextView构件

我们是这样设计的:在窗口上放置一个按钮构件和一个TextView构件,
单击按钮构件,在TextView构件里显示格式话的文本。

TextView构件是这样使用的:TextView构件要和TextBuffer构件结合使用。
在TextBuffer构件里定义并存储“格式化的文本”,然后在TextView构件里
显示出来。

所以使TextView构件显示格式化的文本需要三个步骤:
1、定义“格式化文本”(在TextBuffer里)。
2、存储“格式化文本”(在TextBuffer里)。
3、显示“格式化文本”(在TextView里)

这一节里:定义“格式化文本”,写了一个单独的函数create_tags,
存储“格式化文本”,写了一个单独的函数insert_text,

一、用Glade设计界面,给按钮构件添加clicked信号响应。

二、添加代码。


callbacks.c



/*函数:定义格式化文本*/



static void

create_tags (GtkTextBuffer *buffer)

{

gtk_text_buffer_create_tag (buffer, "bold",

"weight", PANGO_WEIGHT_BOLD, NULL);

gtk_text_buffer_create_tag (buffer, "blue_foreground",

"foreground", "blue", NULL);

gtk_text_buffer_create_tag (buffer, "red_background",

"background", "red", NULL);

/*

参数的含义: "red_background" ,格式化文本的名字。"background", "red", 格式化文本的属性。

*/



}



/*函数:存储格式化文本*/



static void

insert_text (GtkTextBuffer *buffer)

{

GtkTextIter iter;

GtkTextIter start, end;

gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);

gtk_text_buffer_insert (buffer, &iter, "The text widget can display Richtext./n", -1);

gtk_text_buffer_insert (buffer, &iter, "For example, you can have/n ", -1);



gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,

"a blue foreground /n", -1,

"blue_foreground", NULL);



gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,

"a red background /n /n", -1,

"red_background", NULL);

/*

参数的含义:"a red background /n /n", 要显示的文本。"red_background", 格式化文本的名字。

*/

}





void

on_button1_clicked (GtkButton *button,

gpointer user_data)

{



GtkWidget *textview1 = lookup_widget (GTK_WIDGET(button), "textview1");

GtkTextBuffer *buffer;



buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(textview1));

create_tags (buffer);

insert_text (buffer);



}

TreeView构件

Treeview构件的使用,需要三个构件的支持.或者说,Treeview构件和其它三个构件结合在一起才能使用.
这三个构件连同treeview是:
GtkTreeModel
GtkCellRenderer
GtkTreeViewColumn
GtkTreeView

TreeView构件的使用是相当灵活的,它可以,以列表的形式显示数据,
也可以,以树形的形式使用显示数据.
还可以对显示出来的数据,进行各种灵活的操作.
好多功能,以后慢慢捉摸吧!

这一节,我们讲述它的最简单的功能:以列表的形式显示数据.
是这样设计的:单击按钮,在TreeView构件中以列表的形式显示数据。

一、用Glade设计界面。
依此放置window构件,垂直框构件(放置的时候设置为两行),
然后在垂直框的第一行,放置按钮构件。
在第二行,放置TreeView构件。
生成代码。

二、编写代码


callbacks.c

/*定义数据结构*/

typedef struct

{

const gchar *id;

const gchar *name;

const gchar *address;

}

telman;



enum

{

COLUMN_ID,

COLUMN_NAME,

COLUMN_ADDRESS,

NUM_COLUMNS

};



/*添加数据*/

static telman data[] =

{

{"001","cuigf","china"},{"002","home","shanxi"},{"003","",""},

};



/*设置TreeView构件的模式*/

static GtkTreeModel * create_model (void)

{

gint i = 0;

GtkListStore *store;

GtkTreeIter iter;



/* create list store */

store = gtk_list_store_new (NUM_COLUMNS,

G_TYPE_STRING,

G_TYPE_STRING,

G_TYPE_STRING);



/* add data to the list store */

for (i = 0; i < G_N_ELEMENTS (data); i++)

{

gtk_list_store_append (store, &iter);

gtk_list_store_set (store, &iter,

COLUMN_ID, data[i].id,

COLUMN_NAME, data[i].name,

COLUMN_ADDRESS, data[i].address,

-1);

}



return GTK_TREE_MODEL (store);

}



/*往TreeView构件里添加列*/

static void add_columns (GtkTreeView *treeview)

{

GtkCellRenderer *renderer;

GtkTreeViewColumn *column;

renderer = gtk_cell_renderer_text_new ();

column = gtk_tree_view_column_new_with_attributes ("ID",

renderer,

"text",

COLUMN_ID,

NULL);

gtk_tree_view_append_column (treeview, column);



renderer = gtk_cell_renderer_text_new ();

column = gtk_tree_view_column_new_with_attributes ("NAME",

renderer,

"text",

COLUMN_NAME,

NULL);

gtk_tree_view_append_column (treeview, column);



renderer = gtk_cell_renderer_text_new ();

column = gtk_tree_view_column_new_with_attributes ("ADDRESS",

renderer,

"text",

COLUMN_ADDRESS,

NULL);

gtk_tree_view_append_column (treeview, column);

}



void

on_button1_clicked (GtkButton *button,

gpointer user_data)

{

GtkWidget *treeview1 = lookup_widget (GTK_WIDGET(button), "treeview1");

GtkTreeModel *model;

model = create_model ();

gtk_tree_view_set_model(GTK_TREE_VIEW(treeview1),model);

g_object_unref (model);

add_columns (GTK_TREE_VIEW (treeview1));

}




 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值