我的程序只有两个文件:
代码: 全选
#include <gtk/gtk.h>
enum{
NAME_COLUMN = 0,
START_TIME_COLUMN,
END_TIME_COLUMN,
EXPEND_COLUMN,
MAN_COLUMNS
};
//台球桌数据结构
typedef struct {
//是否空闲
char free;
//使用历史,使用树状结构存储。
GtkTreeStore *history;
}billiard_table;
//初始数组
void billiard_table_init(billiard_table array[],int len)
{
int i;
g_type_init();
for(i=0;i<len;i++){
array[i].free = TRUE;
array[i].history = gtk_tree_store_new(
MAN_COLUMNS, G_TYPE_STRING, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_FLOAT);
}
}
代码: 全选
#include "billiard_table.h"
//全局变量
... ...
billiard_table array_billiard_table[21];
GtkWidget *tree;
... ...
//计时或停止计时
void start_and_stop(GtkWidget *widget, gpointer *data)
{
... ...
//将信息加入树
GtkTreeIter iter;
gtk_tree_store_append(
array_billiard_table[current].history,
&iter,
NULL);
gtk_tree_store_set(
array_billiard_table[current].history,
&iter,
NAME_COLUMN,"新用户",
START_TIME_COLUMN,"00:00",
END_TIME_COLUMN,"00:00",
EXPEND_COLUMN,00.00,-1);
... ...
}
... ...
int main(int argc, char *argv[])
{
... ...
billiard_table_init(array_billiard_table,21);
... ...
//树
tree = gtk_tree_view_new();
gtk_fixed_put(GTK_FIXED(anyone_table),tree,15,55);
//要想让视图显示出数据,必须建立GtkCellRenderer与GtkTreeViewColumn
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
//关联视图与模型
gtk_tree_view_set_model(
GTK_TREE_VIEW(tree),
GTK_TREE_MODEL(array_billiard_table[current].history));
//建立一个GtkCellRenderer
renderer = gtk_cell_renderer_text_new();
//设置GtkCellRenderer的渲染方式
g_object_set(G_OBJECT(renderer),
"foreground", "red",
NULL);
column = gtk_tree_view_column_new();
//将列设置为可以手动改变大小
gtk_tree_view_column_pack_start (column, renderer, TRUE);
gtk_tree_view_column_set_resizable(column,TRUE);
gtk_tree_view_column_set_sizing(
column, GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_fixed_width (column, 100);
//将列加入gtk_tree_view
gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
... ...
}