C 创建一个简单的gtk列表

C 创建一个简单的gtk列表,c,linux,gtk,gtk3,C,Linux,Gtk,Gtk3,我想在gtk中创建一个包含以下内容的简单表: | test name | 0 | 10 | 我只是想创建这个,但gtk并没有让这变得容易。我制作了一个GtkListStore,其中包含我需要的所有信息,但显然我还需要创建一个GtkTreeViewColumn。我需要用属性将值传递给gtk_tree_view_column_new_,但问题是我不知道任何属性名称,而且我在任何地方都找不到它们。我找到的唯一属性是“text”,但我也传递无符号整数。有人能告诉我这些属性是什么,以及如何创建一个简单的

我想在gtk中创建一个包含以下内容的简单表:

| test name | 0 | 10 |
我只是想创建这个,但gtk并没有让这变得容易。我制作了一个GtkListStore,其中包含我需要的所有信息,但显然我还需要创建一个GtkTreeViewColumn。我需要用属性将值传递给gtk_tree_view_column_new_,但问题是我不知道任何属性名称,而且我在任何地方都找不到它们。我找到的唯一属性是“text”,但我也传递无符号整数。有人能告诉我这些属性是什么,以及如何创建一个简单的表吗?(我读了顺便说一句)

使用发布的代码,我得到以下结果:

| name ?    |
| test name |

您必须理解模型和视图是分开的概念

GtkListStore
是模型,包含要显示的数据。它还可以有一组视图不需要的其他数据,例如,它可以是更一般的SQL查询的结果

GtkTreeView
是视图,您必须指导它如何在屏幕上显示数据。它通过在矩形区域内填充不同的列来实现。以下示例为您提供了可以实现的想法:

#include <gtk/gtk.h>

enum {
    FILE_NAME,
    FILE_OFFSET,
    FILE_SIZE,
    FILE_DESCRIPTION, /* Not used by the view, maybe used elsewhere */
    COLOR,            /* Just to show how the model can affect the view */
    N_COLUMNS
};

gint main(gint argc, gchar **argv)
{
    GtkListStore*      model;
    GtkWidget*         view;
    GtkTreeViewColumn* column;
    GtkWidget*         window;

    gtk_init(&argc, &argv);

    /* MODEL */
    model = gtk_list_store_new(N_COLUMNS,
                               G_TYPE_STRING,   /* FILE_NAME */
                               G_TYPE_UINT,     /* FILE_OFFSET */
                               G_TYPE_UINT,     /* FILE_SIZE */
                               G_TYPE_STRING,   /* FILE_DESCRIPTION */
                               G_TYPE_STRING    /* COLOR */
                              );
    gtk_list_store_insert_with_values(model, NULL, -1,
                                      FILE_NAME, "test name",
                                      FILE_OFFSET, 0,
                                      FILE_SIZE, 10,
                                      -1);
    gtk_list_store_insert_with_values(model, NULL, -1,
                                      FILE_NAME, "Dummy",
                                      FILE_OFFSET, 123,
                                      COLOR, "black",
                                      -1);
    gtk_list_store_insert_with_values(model, NULL, -1,
                                      COLOR, "blue",
                                      -1);

    /* VIEW */
    view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
    g_object_unref(model);

    column = gtk_tree_view_column_new_with_attributes("Name",
                                                      gtk_cell_renderer_text_new(),
                                                      "text", FILE_NAME,
                                                      "background", COLOR,
                                                      NULL);
    gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);

    column = gtk_tree_view_column_new_with_attributes("Offset",
                                                      gtk_cell_renderer_spin_new(),
                                                      "text", FILE_OFFSET,
                                                      NULL);
    gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);

    column = gtk_tree_view_column_new_with_attributes("Size",
                                                      gtk_cell_renderer_text_new(),
                                                      "text", FILE_SIZE,
                                                      NULL);
    gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);

    /* MAIN */
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_container_add(GTK_CONTAINER(window), view);
    gtk_widget_show_all(window);

    gtk_main ();

    return 0;
}
#包括
枚举{
文件名,
文件偏移量,
文件大小,
文件描述,/*视图未使用,可能在其他地方使用*/
颜色,/*仅显示模型如何影响视图*/
N_列
};
gint干管(gint argc、gchar**argv)
{
GtkListStore*型号;
GtkWidget*视图;
GtkTreeViewColumn*列;
GtkWidget*窗口;
gtk_init(&argc,&argv);
/*模型*/
模型=gtk_列表_存储_新(N_列,
G_类型_字符串,/*文件名*/
G_类型单元,/*文件单元偏移量*/
G_类型单元,/*文件大小*/
G_类型_字符串,/*文件_描述*/
G_类型_字符串/*颜色*/
);
gtk_列表_存储_插入_值(model,NULL,-1,
文件名,“测试名”,
文件偏移量,0,
文件大小,10,
-1);
gtk_列表_存储_插入_值(model,NULL,-1,
文件名“Dummy”,
文件(u OFFSET,123),
颜色,“黑色”,
-1);
gtk_列表_存储_插入_值(model,NULL,-1,
颜色,“蓝色”,
-1);
/*看法*/
视图=gtk_树视图新模型(gtk_树模型(模型));
g_object_unref(模型);
column=gtk_tree_view_column_new_带有_属性(“名称”,
gtk_单元格_渲染器_文本_新(),
“文本”,文件名,
“背景”,颜色,
无效);
gtk树视图附加列(gtk树视图(视图),列);
column=gtk_tree_view_column_new_带有_属性(“偏移量”,
gtk_cell_renderer_spin_new(),
“文本”,文件偏移量,
无效);
gtk树视图附加列(gtk树视图(视图),列);
column=gtk_tree_view_column_new_带有_属性(“大小”,
gtk_单元格_渲染器_文本_新(),
“文本”,文件大小,
无效);
gtk树视图附加列(gtk树视图(视图),列);
/*主要*/
窗口=gtk_窗口_新建(gtk_窗口_顶层);
gtk_容器添加(gtk_容器(窗口),视图);
gtk_小部件_全部显示(窗口);
gtk_main();
返回0;
}

您可能还应该阅读位于:-的GtkTreeView教程,它是为GTK+2.x编写的,但是GtkTreeView API在2.x和3.x之间没有更改。
#include <gtk/gtk.h>

enum {
    FILE_NAME,
    FILE_OFFSET,
    FILE_SIZE,
    FILE_DESCRIPTION, /* Not used by the view, maybe used elsewhere */
    COLOR,            /* Just to show how the model can affect the view */
    N_COLUMNS
};

gint main(gint argc, gchar **argv)
{
    GtkListStore*      model;
    GtkWidget*         view;
    GtkTreeViewColumn* column;
    GtkWidget*         window;

    gtk_init(&argc, &argv);

    /* MODEL */
    model = gtk_list_store_new(N_COLUMNS,
                               G_TYPE_STRING,   /* FILE_NAME */
                               G_TYPE_UINT,     /* FILE_OFFSET */
                               G_TYPE_UINT,     /* FILE_SIZE */
                               G_TYPE_STRING,   /* FILE_DESCRIPTION */
                               G_TYPE_STRING    /* COLOR */
                              );
    gtk_list_store_insert_with_values(model, NULL, -1,
                                      FILE_NAME, "test name",
                                      FILE_OFFSET, 0,
                                      FILE_SIZE, 10,
                                      -1);
    gtk_list_store_insert_with_values(model, NULL, -1,
                                      FILE_NAME, "Dummy",
                                      FILE_OFFSET, 123,
                                      COLOR, "black",
                                      -1);
    gtk_list_store_insert_with_values(model, NULL, -1,
                                      COLOR, "blue",
                                      -1);

    /* VIEW */
    view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
    g_object_unref(model);

    column = gtk_tree_view_column_new_with_attributes("Name",
                                                      gtk_cell_renderer_text_new(),
                                                      "text", FILE_NAME,
                                                      "background", COLOR,
                                                      NULL);
    gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);

    column = gtk_tree_view_column_new_with_attributes("Offset",
                                                      gtk_cell_renderer_spin_new(),
                                                      "text", FILE_OFFSET,
                                                      NULL);
    gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);

    column = gtk_tree_view_column_new_with_attributes("Size",
                                                      gtk_cell_renderer_text_new(),
                                                      "text", FILE_SIZE,
                                                      NULL);
    gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);

    /* MAIN */
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_container_add(GTK_CONTAINER(window), view);
    gtk_widget_show_all(window);

    gtk_main ();

    return 0;
}