gpt4 book ai didi

c - gtk_tree_store如何添加未呈现为列的元素

转载 作者:行者123 更新时间:2023-11-30 17:54:03 28 4
gpt4 key购买 nike

我正在修改一个 C/Gtk+ 程序,该程序具有一个带有列表界面的 GUI,该列表界面显示由 gtk_tree_store 和 gtk_tree_view 支持的一系列行和列。

根据与此程序的交互,我希望将其他值与现有行/条目一起存储在模型/存储中,但是我不希望这些值显示在列中。没有其他现有数据结构包含我可以使用的这些条目。

如何向 gtk_tree_view 添加一个“列”,我可以使用 gtk_tree_store_set 设置该“列”,但不会将其渲染或呈现为列?目前正在使用如下代码添加列:

renderer = gtk_cell_renderer_text_new();

g_object_set(
renderer,
"foreground",
"white",
NULL);


column = gtk_tree_view_column_new_with_attributes (
"ColX",
renderer,
"text",
COLUMN_ID_X,
"foreground",
SOME_COLOR,
"foreground-set",
COLOR_SET_COLUMN,
NULL);

gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);

最佳答案

仅存储数据而不在GtkTreeView中显示它们您只需使用模型(GtkTreeStoreGtkListStore 等),也就是说,不要在模型中为该特定属性添加列。

这里是 gtk3-demo 的稍微修改版本展示如何在 GtkListStore 中存储 2 个“列” ,但仅在 GtkTreeView 中显示一个(严重性列)。请注意函数 create_modeladd_columns

#include <gtk/gtk.h>

enum
{
COLUMN_NUMBER,
COLUMN_SEVERITY,
NUM_COLUMNS
};

static GtkTreeModel *
create_model (void)
{
GtkListStore *store;
GtkTreeIter iter;

store = gtk_list_store_new (NUM_COLUMNS,
G_TYPE_UINT,
G_TYPE_STRING);

gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
COLUMN_NUMBER, 1,
COLUMN_SEVERITY, "Normal", -1);

gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
COLUMN_NUMBER, 2,
COLUMN_SEVERITY, "Critical", -1);

return GTK_TREE_MODEL (store);
}

static void
add_columns (GtkTreeView *treeview)
{
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
GtkTreeModel *model = gtk_tree_view_get_model (treeview);

renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Severity", renderer,
"text", COLUMN_SEVERITY,
NULL);
gtk_tree_view_append_column (treeview, column);
}

int
main (int argc, char **argv)
{
GtkWidget *window = NULL;
GtkTreeModel *model = NULL;
GtkWidget *treeview;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (window), 280, 250);
g_signal_connect (window, "delete-event", G_CALLBACK (gtk_main_quit), NULL);

model = create_model ();
treeview = gtk_tree_view_new_with_model (model);
g_object_unref (model);

add_columns (GTK_TREE_VIEW (treeview));

gtk_container_add (GTK_CONTAINER (window), treeview);
gtk_widget_show_all (window);

gtk_main ();

return 0;
}

关于c - gtk_tree_store如何添加未呈现为列的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15239875/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com