Domanda

Quando si scrive un programma in C, che ha un sacco di printf per uno scopo molto: debuggin, informazioni, ecc mi piacerebbe fare qualcosa di simile in GTK, avendo alcuni widget che avrebbe potrai vedere tutti i messaggi printf solito farebbe in un normale programma c

Grazie,

--- --- UPDATE Sto utilizzando VTE come ptomato consigliato. Anche se alcuni problemi si avvicinò. Stavo usando radura-3 e quando il file glade è stato aperto il widget di TEV non ha mostrato. Ho notato che un sacco di Attenzione e 2 errori critici avrebbero visualizzare durante l'apertura. Uno di questi era critica

Unable to load module 'vte' from any search paths

I installato libvte-dev throug apt-get e so che vedo come nel widget palette

È stato utile?

Soluzione

È possibile utilizzare VTE, un widget emulatore di terminale. Non sono sicuro, ma penso che si può reindirizzare stdout del vostro programma per il widget utilizzando vte_terminal_set_pty() .

Altri suggerimenti

È possibile creare un modalità testo o utilizzare il < a href = "http://library.gnome.org/devel/gtk/unstable/GtkLabel.html" rel = "nofollow noreferrer"> etichetta .

Aggiungi questo punto di vista il testo alla finestra padre dire Gtk Finestra principale . Si può decidere che altri widget da aggiungere. (Può essere una finestra di scorrimento e poi una vista di testo).

Usa il gtk_text_view_set_buffer api per visualizzare il testo al ogni finestra che si desidera visualizzare un log.

Si deve semplicemente utilizzare un GtkTextView e utilizzare queste funzioni per reindirizzare la tua registrazione in esso:

  • g_log_set_default_handler () per g_message () / g_warning () / etc. (Tutto ciò che passa attraverso G_log ())
  • g_set_print_handler () (per g_print ())
  • g_set_printerr_handler () (per g_printerr ())

Purtroppo, la printf semplice () non può essere reindirizzato facilmente (ma g_print () è un buon sostituto per esso).

PS: Spiacenti, posso incollare solo un link per voi (nuovo utente) ...

È possibile utilizzare asprintf () come estensione GNU effettuare output formattato che è memorizzato in una nuova memoria allocata e deve essere liberato in seguito.

char* str;
asprintf(&str, "It is a number %d\n", 1);
//...
free(str);

Invece che uno, è possibile utilizzare snprintf (), che non assegnava nulla per voi, basta compilare un array di caratteri per voi (come un output formattato).

char str[100];
snprintf(str, 100, "It is number %d\n", 1);

Inoltre è possibile utilizzare g_string_printf (), che è una funzione glib, ma memorizza l'output formattato ad una variabile GString.

GString str;
g_string_printf(&str, "It is number %d\n", 1);
//...
g_string_free(&str, TRUE);

Quando avete ottenuto la stringa come un output formattato, è possibile utilizzarlo come un testo per qualsiasi widget di GTK.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top