我想在gtk中创建一个包含以下内容的简单表:
| test name | 0 | 10 |
我只想创建它,但gtk并不能让这一切变得简单。我创建了一个包含我需要的所有信息的GtkListStore,但显然我还需要创建一个GtkTreeViewColumn。我需要将值传递给gtk_tree_view_column_new_with_attributes,但问题是我不知道任何属性名称,我无法在任何地方找到它们。我找到的唯一属性是“text”,但我也传递了无符号整数。有人能告诉我这些属性是什么,以及如何创建一个简单的表? (我读过https://developer.gnome.org/gtk3/stable/TreeWidget.html btw)
enum { FILE_NAME = 0, FILE_OFFSET, FILE_SIZE };
GtkWidget* tree;
GtkListStore* store;
GtkTreeIter iter;
GtkCellRenderer* renderer;
GtkTreeViewColumn* column;
store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT);
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter, FILE_NAME, "test name", FILE_OFFSET, 0,
FILE_SIZE, 10, -1);
tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
g_object_unref (G_OBJECT (store));
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Name", renderer,
"text", FILE_NAME, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
使用发布的代码,我得到以下结果:
| name ? |
| test name |
答案 0 :(得分:5)
您必须了解模型和视图是分开的概念。
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;
}