我正在尝试获取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
有人知道我可能要去哪里吗?
非常感谢您的帮助,谢谢。
根据Gtk3 doc,gtk_list_store_remove
从列表存储中删除给定的行。删除后,将iter设置为下一个有效行,或者如果iter指向list_store中的最后一行,则无效。
您需要在调用gtk_list_store_remove之前获取removeIndex
。