【发布时间】:2020-04-09 23:07:44
【问题描述】:
我正在尝试获取 GTK TreeView 中选定项目的索引值,以便使用该索引从匹配的值数组中删除该值。我的代码对 TreeView 中的所有项目都成功地执行了此操作,但列表中的最后一项除外。尝试删除最后一项时出现此错误:
(SDS-CW:32229): Gtk-CRITICAL **: 00:07:38.494: gtk_list_store_get_path: assertion 'iter->stamp == priv->stamp' failed
(SDS-CW:32229): Gtk-CRITICAL **: 00:07:38.494: gtk_tree_path_get_indices: assertion 'path != NULL' failed
这是我的代码:
void remove_hash(GtkWidget *widget, gpointer user_data) {
struct data *dataStruct = user_data;
GtkListStore *store;
GtkTreeModel *model;
GtkTreeIter iter;
GtkTreePath *path;
GtkTreeSelection *selectedHash = dataStruct->selectedHash;
int removeIndex;
store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list)));
model = gtk_tree_view_get_model(GTK_TREE_VIEW(list));
if (gtk_tree_model_get_iter_first(model, &iter) == FALSE) {
return;
}
if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selectedHash), &model, &iter)) {
gtk_list_store_remove(store, &iter);
}
path = gtk_tree_model_get_path(model, &iter); <-- This appears to be returning NULL
removeIndex = *gtk_tree_path_get_indices(path) + 1; <-- Error occurs here, I believe
g_print("Remove Index: %i\n", removeIndex);
g_print("Remove Hash: %s\n", dataStruct->queuedHashes[removeIndex][0]);
// Function continues below, but error occurs above
有谁知道我哪里出错了?
任何帮助将不胜感激,谢谢。
【问题讨论】:
-
如果选择了最后一项,
gtk_list_store_remove使iter无效。我认为您需要在调用 gtk_list_store_remove 之前获取 removeIndex。 -
@JohnKoch 啊,是的,我是个白痴,应该发现那个。我在想它需要的复杂得多。谢谢!您能否发布答案,以便我接受您代表的解决方案?
标签: c segmentation-fault gtk