0

GtkListStore重複を避けるために、値が既に a に存在するかどうかを確認するにはどうすればよいですか? ユーザーのデータ入力に従って動的にデータベースから値を取得しますが、ユーザーが以前に入力した単語と同じまたは類似の単語を入力すると、同じ結果が返される可能性があるため、 my に重複する値はありませんGtkListStore

に値を追加するために現在使用している関数は次のGtkListStoreとおりです。

static inline void update_c_list(struct al_t *new_list, size_t new_list_size)
{
  struct al_t *l = new_list;
  GtkTreeIter iter;
  size_t i = 0;

  for(; i < new_list_size; i++,l++) {

    if(/* magic to avoid double goes here */) {
    gtk_list_store_append(completionmodel, &iter);
    gtk_list_store_set(completionmodel, 
               &iter, C_NAME, l->name,
               C_NICK, FOO_STRING(l->foo),
               C_EMAIL, BAA_STRING(l->baa), -1);
    }
  }

  gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(completionmodel));
}
4

1 に答える 1

1

リストを繰り返して、同じデータがリストに存在するかどうかを確認する必要があります。

struct CListLooupStruct
{
  gbolean b_found;
  struct al_t *l;
}; 

gbolean search_c_list_func(GtkTreeModel *model, 
                           GtkTreePath *path, 
                           GtkTreeIter *iter, 
                           gpointer data)
{
   gchar name[MAX_NAME_LENGTH];
   CListLooupStruct* lookup = (CListLooupStruct*)data;
   gtk_tree_model_get (model, iter, 0, &name, -1)
   if (/*compare name to lookup->name */)
   { 
       lookup->b_found = TRUE;
       return TRUE;
   }
   return FALSE;
}

update_c_list()関数では、次のことを行う必要があります。

...
CListLooupStruct c_list_lookup = { FALSE, new_list };    
gtk_tree_model_foreach(completionmodel, search_c_list_func, &c_list_lookup);
if (/* magic to avoid double */ c_list_lookup.b_found == FALSE )
...
于 2012-11-16T03:17:51.423 に答える