2010-04-12 4 views
0

Être nouveau à l'utilisation de GTK +, je ne suis pas pleinement conscient de toutes ses fonctionnalités.Actualiser le texte affiché dans un widget GTK +?

Fondamentalement, j'ai un widget GtkTreeView qui a 4 colonnes. J'ai besoin de mettre à jour le texte affiché dans les 4 colonnes toutes les deux secondes, mais je ne suis pas au courant comment le faire dans GTK +.

Je suis conscient que je pourrais vider les données en utilisant gtk_tree_store_clear, mais je ne suis pas sûr de savoir comment repeupler les colonnes et que la fenêtre de niveau supérieur s'actualise pour afficher ces nouvelles données.

Répondre

1

Vous devez obtenir un GtkTreeIter à la rangée appropriée, puis utiliser le setter approprié (spécifique au modèle) pour modifier les données.

Par exemple gtk_list_store_set() pour le modèle GtkListStore.

Il n'est pas nécessaire d'effacer le modèle entier si vous voulez simplement modifier certaines données, ce qui est très coûteux et lent.

Si vous avez vraiment besoin de changer toutes les données, alors, effacez-les.

Vous n'avez pas à vous préoccuper de l'actualisation de l'affichage; la vue écoute les événements du modèle et sait automatiquement se rafraîchir lorsque le modèle change.

MISE À JOUR:

Lors de la modification des données (comme décrit dans obtenir des commentaires), vous ne avez pas besoin de « vider » les anciennes données. Le modèle possède les données et sait comment garder la trace de la mémoire utilisée. Vous utilisez simplement l'appel gtk_list_store_set() mentionné ci-dessus pour mettre les nouvelles données souhaitées dans le modèle. Vous pouvez le faire aussi souvent que nécessaire, et une fréquence de mise à jour de toutes les quelques secondes ne devrait poser aucun problème. Bien sûr, dans un tel cas, pour garder votre application (ce que je suppose être à un seul thread, pour plus de simplicité), vous devez avoir un moyen de déclencher de manière asynchrone une mise à jour, peut-être en utilisant un timer. Jetez un oeil à la fonction g_timeout_add() de glib pour apprendre à ajouter une minuterie globale simple.

+0

ahhh, bon à savoir, merci pour votre aide se détendre – paultop6

+0

im me demandant si vous pouvez m'aider à se détendre. Le problème im ayant essaie de placer dans les nouvelles données. Je dois vider et remplacer les données toutes les quelques secondes. Je suis inquiet im va avoir une fonction qui est constamment en boucle, rinçage et placer de nouvelles données. Comment est-il possible de vider les données des colonnes et de les remplacer après avoir appelé gtk_main? – paultop6

+0

@ paultop6: J'ai essayé de mettre à jour la réponse pour résoudre ces problèmes. – unwind

Questions connexes