C++ + Gtkmm2



  • Hi, ich habe ein kleines Problem mit Gtkmm, ich schreibe mir zur Zeit einen kleinen Editor, leider habe ich bis her keine möglichkeit entdecken können mit
    der ich ein Objekt speichern kann, schlieslich will ich ja den Text, den ich mit meinem Editor verfasse auch mal speichern wollen 🙂
    Ich gebe hier mal einen minimalen Quellcode an, vielleicht hilf es irgend wem ja.
    in EditorWindow::on_menu_file_save() sollte dann die funktion hinein, ich habe schon etliches ausprobiert, nichts hat aber wirklich funktioniert.

    die Header-Datei: unstable_editor.h
    #include <gtkmm.h>
    
    class EditorWindow : public Gtk::Window {
    
    	public:
    	 EditorWindow();
    	 virtual ~EditorWindow();
    
    	protected:
    	 Gtk::HBox m_HBox;
    	 Gtk::VBox m_VBox;
    	 Gtk::Toolbar  m_Toolbar;
    	 Gtk::TextView m_Textview;
    	 Gtk::TextBuffer m_b;
    
    	// Menubars
    	 Gtk::MenuBar m_Menubar;
    	 Gtk::Menu    m_Menu_File;
    
    	 Glib::RefPtr<Gtk::TextBuffer> m_buffer,hallo;
    
    	 // Virtual
    
    	 virtual void on_menu_file_quit();
    	 virtual void on_menu_file_save();
    	 virtual void on_menu_file_new();
    	 // virtual void fill_buffer();
    };
    
    Die dazugehörige unstable_editor.cpp
    #include <gtkmm.h>
    #include <iostream>
    #include "editor_unstable.h"
    
    EditorWindow::EditorWindow() {
    
    	// Window settings
    
    	set_default_size(700, 600);
    	set_title("Editor::Editor");
    
    	add(m_VBox);
    
    	// Menu File
    
    	m_Menubar.items().push_back( Gtk::Menu_Helpers::MenuElem("_Datei", m_Menu_File) );
    
    	{
    
    		Gtk::Menu::MenuList& menulist = m_Menu_File.items();
    
    		// Programm beenden 
    
    		menulist.push_back( Gtk::Menu_Helpers::MenuElem("_Beenden",  Gtk::Menu::AccelKey("<control>q"),
            SigC::slot(*this, &EditorWindow::on_menu_file_quit) ) );
    
    		// Speicherfunktion
    
    		menulist.push_back( Gtk::Menu_Helpers::MenuElem("_Speichern", Gtk::Menu::AccelKey("<control>s"),
    		SigC::slot(*this, &EditorWindow::on_menu_file_save) ) );
    
    		// Neu
    
    		menulist.push_back( Gtk::Menu_Helpers::MenuElem("_Neu", Gtk::Menu::AccelKey("<control>n"),
    		SigC::slot(*this, &EditorWindow::on_menu_file_new) ) );
    
    	}
    
    	// Add Menu
    
     	m_VBox.pack_start( m_Menubar, Gtk::PACK_SHRINK );
    
    	// TextFläche
    
    	m_VBox.pack_start(m_Textview);
    
        show_all_children();
    
    }	
    
    EditorWindow::~EditorWindow() {
    
    }
    
    void EditorWindow::on_menu_file_quit() { hide(); }
    
    void EditorWindow::on_menu_file_save() { 
    
    	 m_buffer = Gtk::TextBuffer::create();
    
    }
    
    void EditorWindow::on_menu_file_new() { }
    


  • du kannst doch einfach die Gtk::Textbuffer::get_text Funktion nehmen, den Text auslesen und via. std::wofstream in eine Datei schreiben (für UTF-8/16 Ausgabe müsstest du dir aber eigene Ausgabe Funktionen schreiben!)

    http://www.gtkmm.org/gtkmm2/docs/reference/html/classGtk_1_1TextBuffer.html#a33


Anmelden zum Antworten