Обновить текст, отображаемый в виджете GTK +? - PullRequest
0 голосов
/ 12 апреля 2010

Будучи совершенно новым для использования GTK +, я не полностью осознаю всю его функциональность.

По сути, у меня есть виджет GtkTreeView, который имеет 4 столбца. Мне нужно обновлять текст, отображаемый в 4 столбцах каждые пару секунд, но я не знаю, как это сделать в GTK +.

Мне известно, что я могу сбросить данные, используя gtk_tree_store_clear, но я не уверен, как заполнить столбцы и обновить окно верхнего уровня, чтобы отобразить эти новые данные?

1 Ответ

1 голос
/ 12 апреля 2010

Вам нужно получить GtkTreeIter в нужную строку, а затем использовать соответствующий (специфичный для модели) установщик для изменения данных.

Например, <a href="http://library.gnome.org/devel/gtk/stable/GtkListStore.html#gtk-list-store-set" rel="nofollow noreferrer">gtk_list_store_set()</a> для модели GtkListStore.

Нет необходимости очищать всю модель, если вы просто хотите изменить некоторые данные, это очень расточительно и медленно.

Если вам действительно нужно изменить все данные, то обязательно очистите их.

Вам не нужно беспокоиться о том, чтобы обновить экран; представление слушает события из модели и автоматически знает, что нужно обновить при изменении модели.

UPDATE:

При изменении данных (как описано в комментарии) вам не нужно «сбрасывать» старые данные. Модель владеет данными и знает, как отслеживать используемую память. Вы просто используете вышеупомянутый вызов gtk_list_store_set() по мере необходимости, чтобы поместить новые требуемые данные в модель. Вы можете делать это так часто, как это необходимо, и частота обновления каждые несколько секунд не должна быть проблемой.

Конечно, в таком случае, чтобы обеспечить отзывчивость вашего приложения (которое, я полагаю, однопоточное, для простоты), вы должны иметь способ асинхронного запуска обновления, возможно, с использованием таймера. Взгляните на функцию <a href="http://library.gnome.org/devel/glib/stable/glib-The-Main-Event-Loop.html#g-timeout-add" rel="nofollow noreferrer">g_timeout_add()</a> в glib, чтобы узнать, как добавить простой глобальный таймер.

...