C GTK TreeView列标题消失
我有一个程序,可以将文本文件解析成不同的单词,并通过GTK3在树状视图中显示它们加上它们的计数。一列是“Word”,另一列是“Count” 出于某种原因,当文件具有1638个以上的不同“单词”时,即使解析和单词显示正常进行,树视图也不再显示列名。查看屏幕截图 单词存储在结构中:C GTK TreeView列标题消失,c,gtk,C,Gtk,我有一个程序,可以将文本文件解析成不同的单词,并通过GTK3在树状视图中显示它们加上它们的计数。一列是“Word”,另一列是“Count” 出于某种原因,当文件具有1638个以上的不同“单词”时,即使解析和单词显示正常进行,树视图也不再显示列名。查看屏幕截图 单词存储在结构中: typedef struct Word{ char * _origWord; char * _word; int _number; struct Word * _left;
typedef struct Word{
char * _origWord;
char * _word;
int _number;
struct Word * _left;
struct Word * _right;
Line * _line;
} Word;
“Line”是另一个用于记录单词出现的行的结构
以下是将每个“单词”添加到GtkTreeStore的代码:
static void store_words_counts(Word *w, GtkTreeStore *store, GtkTreeIter iter){
if (w->_word == NULL) return;
store_words_counts(w->_left, store, iter);
if (strlen(w->_origWord) > 0 && strAlpha(w->_origWord)){
gtk_tree_store_append (store, &iter, NULL);
int length = snprintf( NULL, 0, "%d", w->_number);
char * number = malloc(length + 1);
snprintf(number, length + 1, "%d", w->_number);
gtk_tree_store_set(store, &iter,
0, w->_origWord,
1, number,
-1);
free(number);
}
store_words_counts(w->_right, store, iter);
}
下面是创建列的代码:
GtkTreeStore * store = gtk_tree_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
/* Load the data - call to parser */
load_tree_store(store, contents);
GtkWidget * tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
gtk_tree_selection_set_mode(selection, GTK_SELECTION_NONE);
g_object_unref (G_OBJECT (store));
GtkCellRendere *renderer = gtk_cell_renderer_text_new();
GtkTreeViewColumn *column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_title (column, "Word");
gtk_tree_view_column_pack_start (column, renderer, TRUE);
gtk_tree_view_column_set_attributes(column, renderer, "text", 0, NULL);
printf("title is: %s\n", gtk_tree_view_column_get_title(column));
//column = gtk_tree_view_column_new_with_attributes ("Word", renderer,
// "text", 0,
// NULL);
我没有为列编号使用枚举,以便确保正确创建列。我还提出了一种快速创建专栏的方法,并一步一步地完成了。当我在创建和加载列后检查它们的标题时,标题会正确地打印到标准输出
你知道为什么它们在加载一定数量的数据后不进行渲染吗?谢谢
是否从mainloop调用
store\u words\u counts
?否,它是从load\u tree\u store中调用的。load_tree_store确定是显示Word+Count、Word+Lines还是Word+Count+LinesSwell,如果检查它的回溯,是否最终满足main()
?因为不从mainloop访问gtk是UB,从其他线程调用gtk_*
函数可能会导致小部件消失。6.7.2.2还承诺了以下内容:如果第一个枚举数没有=,则其枚举常量的值为0。每个no=的后续枚举数将其枚举常量定义为通过将1添加到前一个枚举常量的值而获得的常量表达式的值
Ow,我在第二个代码片段(很可能是mainloop)中看到了load\u tree\u store