gtkmm2
-
Nabend,
ich habe heute angefangen in GTKMM zu programmieren,
nu hab ich mir son mini-Editor geschrieben mit nem Text-Feld
und nem Menu in dem zur Zeit nur die Option "Speichern" vorhanden ist,
meine Frage ist nun, wie kann ich etwas abspeichern? Wenn ich was geschrieben habe, will ich es ja anschließend (manchmal) speichern. Jemand ne Idee?
Ich kann ja mal meinen bisherigen Code zeigen, vielleicht könnt ihr mir auch nebenbei sagen was an meinem Code schlecht ist, wo ich etwas verbessern könnte.
Danke schonmal im voraus.// editor.hh #include <gtkmm.h> class EditorWindow : public Gtk::Window { public: EditorWindow(); virtual ~EditorWindow(); protected: virtual void on_menu_file_quit(); virtual void on_menu_file_new_generic(); virtual void on_menu_file_save(); Gtk::VBox m_VBox; Gtk::MenuBar m_MenuBar; Gtk::Menu m_Menu_File; Gtk::Menu m_Menu_File_New; // Untermenu von Datei Gtk::Menu m_Menu_File_Save; Gtk::Menu m_Menu_About; Gtk::TextView m_TextView; Gtk::ScrolledWindow m_ScrolledWindow; };
// editor.cc #include "editor.hh" #include <iostream> #include <fstream> using namespace std; EditorWindow::EditorWindow() { set_title("little Editor"); set_default_size(800, 600); add(m_VBox); { Gtk::Menu::MenuList& menulist = m_Menu_File_New.items(); menulist.push_back( Gtk::Menu_Helpers::MenuElem("_Neu", Gtk::Menu::AccelKey("<control>n"), SigC::slot(*this, &EditorWindow::on_menu_file_new_generic) ) ); } { Gtk::Menu::MenuList& menulist = m_Menu_File.items(); menulist.push_back( Gtk::Menu_Helpers::MenuElem("_Neu", m_Menu_File_New) ); //Add sub menu. menulist.push_back( Gtk::Menu_Helpers::MenuElem("_Speichern", Gtk::Menu::AccelKey("<control>q"), SigC::slot(*this, &EditorWindow::on_menu_file_save) ) ); menulist.push_back( Gtk::Menu_Helpers::MenuElem("_Beenden", Gtk::Menu::AccelKey("<control>q"), SigC::slot(*this, &EditorWindow::on_menu_file_quit) ) ); } m_MenuBar.items().push_back( Gtk::Menu_Helpers::MenuElem("_File", m_Menu_File) ); m_MenuBar.items().push_back( Gtk::Menu_Helpers::MenuElem("_Info", m_Menu_About) ); m_VBox.pack_start(m_MenuBar, Gtk::PACK_SHRINK); m_ScrolledWindow.add(m_TextView); m_ScrolledWindow.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); m_VBox.pack_start(m_ScrolledWindow); // fill_buffers(); show_all_children(); } EditorWindow::~EditorWindow() { } void EditorWindow::on_menu_file_quit() { hide(); } void EditorWindow::on_menu_file_new_generic() { cout << "Neu..." << endl; } void EditorWindow::on_menu_file_save() { ofstream out(&m_TextView); { } }
// main.cc #include <gtkmm/main.h> #include "editorwindow.h" int main(int argc, char *argv[]) { Gtk::Main kit(argc, argv); EditorWindow ew; Gtk::Main::run(ew); }
-
Ich hab in einer GTKMM-Demo für einen Editor einfach einen Save-Button eingefügt und dann als Callback folgendes genommen
void save_cb() { Gtk::FileSelection dialog("Please choose a file"); dialog.set_transient_for(*this); if(dialog.run()==Gtk::RESPONSE_OK) { std::ofstream file(dialog.get_filename().c_str()); file << edit.get_buffer()->get_text(); } }
-
hallo kingruedi,
bei edit.get_buffer(), was issen edit? ein string?
-
nein, natürlich ein Gtk::TextView-Objekt