Gtk, проверьте, пусто ли GtkTreeView - PullRequest
0 голосов
/ 25 декабря 2011

У меня есть следующий код, чтобы узнать, выбрана ли строка, которая выделена и какой текст находится в строке GtkTreeView. Код находится в обработчике события отпускания ключа.

char *ntext;
if (gtk_tree_selection_get_selected(treeselen, &modelen ,&iteren))
{
    gtk_tree_model_get(modelen, &iteren, cEng, &ntext, -1);
... etc...

Это работает нормально, когда мой вид не пустой. Но когда список пуст, я получаю «ошибку сегментации». Я думаю, что перед этим необходимо проверить, является ли GtkTreeView пустым.

Как это сделать?

На самом деле, позже я обнаружу, что список частично заполнен нажатием на незаполненную область. Поэтому мне тоже нужно решение.

1 Ответ

1 голос
/ 26 декабря 2011

Из вашего описания, это появляется, когда вы говорите, GtkTreeView это пусто вы имеете в виду в модели (GtkTreeModel, которая реализована как GtkListStore или GtkTreeStore, связанный с вашим GtkTreeView), строки данных добавляются, но являются пустыми, т.е. данные не установлены. В этом случае вам нужно проверить значение, возвращаемое gtk_tree_model_get (при условии, что cEng является действительным, в противном случае вы получите предупреждение при запуске программы). Проблема в основном в ...etc.... Просто добавьте NULL чек к ntext, прежде чем работать с ним.

char *ntext;
if (gtk_tree_selection_get_selected(treeselen, &modelen ,&iteren))
{
    gtk_tree_model_get(modelen, &iteren, cEng, &ntext, -1);
    if( ntext == NULL )
    {
       printf("Data is NULL!\n");
       /* Handle this case */
    }
   else
   { 
     .... etc ....
   }
}

Это может также иметь место при нажатии кнопки или отпускании обратного вызова.
Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...