2016-05-07 18 views
0

Ich lerne GTKmm (C++) unter Linux.C++ GTKmm - Wie bekomme ich den Inhalt meines TextView (TextBuffer)

Ich möchte den Inhalt einer TextView per Knopfdruck erhalten.

Der Code std::cout << m_textBuffer->get_text(); gibt nichts an die Konsole aus, und ich kann nicht genug Erklärung auf der offiziellen Website finden.

Es scheint, dass ich Iterator verwenden muss, aber mit m_textBuffer->start() in der Funktion get_text() zu tun, sagt mir, dass start() ist keine Funktion von TextBuffer, sowie ein Ende() gleichwertig.

Die Ausgabe der Konsole ein paar Warnung, die in Zusammenhang stehen könnten:

Gtk-KRITISCH **: gtk_text_buffer_get_iter_at_mark: Behauptung 'GTK_IS_TEXT_MARK (mark)' failed Gtk-KRITISCH **: gtk_text_layout_get_line_yrange: Behauptung _gtk_text_iter_get_btree‘(iter) == _gtk_text_buffer_get_btree (layout-> Puffer)‘failed

im GUI-Konstruktor ich habe diese:

m_txtQuestion.set_buffer(m_textBuffer); 

m_textBuffer = Gtk::TextBuffer::create(); 
m_textBuffer->set_text("") 

Antwort

1

(für gtkmm-2.4 und gtkmm-3.0):
Anstatt zu versuchen, einen Puffer zu setzen, verwenden Sie nur die eine in der Textview:

m_txtQuestion.get_buffer()->set_text("My text."); 

dann den Text Verwendung zu erhalten:

m_txtQuestion.get_buffer()->get_text(); 
+0

Danke, das hat funktioniert. Zur Klarstellung war m_txtQuestion die TextView, m_textBuffer war der TextBuffer. Ich muss also keinen TextBuffer erstellen, da TextView bereits einen TextBuffer bereitstellt (sollte das Dokument sorgfältiger gelesen haben). Ich kann es jetzt wieder auf die Konsole ausgeben, aber es wird nur den Text anzeigen (mit 'std :: cout << m_textBuffer-> get_text()') wenn das Programm geschlossen wird, ABER es wird sofort angezeigt, wenn ich 'std :: cout << m_textBuffer-> get_text() << "\ n" '(oder wenn ich \ n durch std :: endl ersetze). Wenn Sie mir sagen können, warum das großartig wäre, aber bis jetzt ist es nur Neugier. Danke noch einmal. – user96649

+0

Sorry wegen der Verwirrung, ich habe nicht darauf geachtet, welches Objekt das TextView war. Ich habe meine Antwort bearbeitet, um TextView zu verwenden. Ich bin nicht sicher, warum es nicht druckt, bis das Programm schließt (Sie müssen möglicherweise ein Ereignis oder ein Signal verarbeiten, wie on_click, und den Druck in dem Signalhandler ablegen). – mikero

+0

Hinweis: std :: endl löscht den Ausgabestream (zusätzlich zum Einfügen einer neuen Zeile). Dies könnte der Grund sein, warum Sie bei der Verwendung sofort eine Konsolenanzeige sehen. Was "\ n" betrifft, bin ich nicht sicher, warum das sofort angezeigt wird, es sei denn, die Bibliotheksimplementierung behandelt es wie std :: endl. – mikero

Verwandte Themen