[gtkmm] problem mit Glib::ustring und textview



  • Hallo ich habe ein Problem mit gtkmm und dem widget textview.

    **1. Wie kann ich ein "char Array" (char bsp[10]), den ich aus einer Datei auslese, in ein ustring umwandeln?

    2. Wie kann ich diesen ustring in den textview schreiben und auslesen?
    **

    Vielen Dank für eure Hilfe



  • Zu 1: Schau dir mal die Konstruktoren an: http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/classGlib_1_1ustring.html

    Zu 2: Schau dir das hier an (besonders die Examples): http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/chapter-textview.html

    Für's nächste mal: Erst in die Doku schauen 😉



  • Danke für die Antwort.

    Die beiden Seiten hab ich auch schon gesehen, weiß aber leider nicht wie man das anwendet.

    Vielleicht könntest du ein kurzen Beispielcode schreiben wie man einen ustring in das textfeld ein und rausschreibt.

    Danke



  • Äh, ja, morgen hab ich Zeit dafür...



  • Ich verzichtete mal auf Kommentare... sollte dennoch verständlich sein, ist ja sehr kompakt:

    #include <gtkmm.h>
    
    class App : public Gtk::Window {
    protected:
    	Gtk::VBox vBox;
    	Gtk::HBox hBoxText, hBoxButton;
    	Gtk::ScrolledWindow scrolledWindow;
    	Gtk::TextView textView;
    	Glib::RefPtr<Gtk::TextBuffer> buffer;
    
    	Gtk::Button button;
    
    	void on_button_click() {
    		const char * const text = "Simply some text";
    
    		Glib::ustring str(text);
    		this->buffer->set_text(str);
    	}
    
    public:
    	App() {
    		this->set_default_size(300, 200);
    
    		this->buffer = Gtk::TextBuffer::create();
    		this->textView.set_buffer(this->buffer);
    
    		this->scrolledWindow.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
    		this->scrolledWindow.add(this->textView);
    		this->hBoxText.pack_start(scrolledWindow);
    		this->vBox.pack_start(hBoxText);
    
    		this->button.set_label("Set text...");
    		this->button.signal_clicked().connect(sigc::mem_fun(*this, &App::on_button_click));
    		this->hBoxButton.pack_start(button);
    		this->vBox.pack_start(hBoxButton);
    
    		this->add(vBox);
    
    		this->show_all_children();
    	}
    };
    
    int main(int argc, char *argv[]) {
    	Gtk::Main m(argc, argv);
    
    	App app;
    	m.run(app);
    	return EXIT_SUCCESS;
    }
    


  • Danke für die Hilfe es funktioniert soweit, aber hab ich noch zwei Probleme mit meinem Programm. Eins wäre die Auslesung des ustrings aus dem textview (oder den buffer?) und das andere wäre, dass ich diesen in eine sequenzielle datei schreiben will und ihn dafür ja wieder in einen normalen String umwandeln muss oder geht das auch mit dem ustring?

    Vielen Dank



  • swiffy schrieb:

    Danke für die Hilfe es funktioniert soweit, aber hab ich noch zwei Probleme mit meinem Programm. Eins wäre die Auslesung des ustrings aus dem textview (oder den buffer?)

    Ja, du liest aus dem Buffer... schau hierzu in die Doku von Gtk::TextBuffer.

    und das andere wäre, dass ich diesen in eine sequenzielle datei schreiben will und ihn dafür ja wieder in einen normalen String umwandeln muss oder geht das auch mit dem ustring?

    Da der << operator von Glib::ustring überschrieben ist, kannst du den ustring direkt in einen stream schicken. Bei Umlauten usw. musst du evtl. aufpassen, je nach encoding, OS usw.. Siehe auch hier: http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/group__CharsetConv.html#g4517b17f2aad4cd5c0e0640de212d928 und http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/group__CharsetConv.html#gcc062729285890a7e9b22bece6fb987c

    Probier's doch einfach mal... dein Compiler wird nicht explodieren, wenn's beim ersten mal nicht klappt...


Anmelden zum Antworten