Ruf den Ktor



  • Hallo,

    Wieso wird hier kein Menu im Fenster angezeigt? Rufe ich überhaupt den Ktor
    aus der Klasse class InitFenster auf? Das Programm lässt sich zwar kompilieren,
    aber ausser dem Fenster erscheint nichts weiter, eigentlich sollte ein Menu
    dort erscheinen mit dem Namen Datei, bitte schaut euch mal den Code und und ganz nebenbei bin ich für Verbesserungsvorschläge offen!

    /* InitFenster.hh */
    
    #include "MenuLeiste.hh"
    // Gtkmm Bibliotheken 
    #include <gtkmm.h>
    
    using namespace Gtk;
    
    class InitFenster : public Window {
    public:
    
    	InitFenster();
    	MenuLeiste ml;
    
    	virtual ~InitFenster(); 
    };
    
    #include "InitFenster.hh"
    #include "MenuLeiste.hh"
    
    // Std C++ Bibliotheken
    #include <iostream>
    
    InitFenster::InitFenster()
    {
    	set_title("Editor");
    	set_default_size(800, 600);
    
    }
    
    InitFenster::~InitFenster()
    {
    }
    
    /* MenuLeiste.hh */
    #include <gtkmm.h>
    
    using namespace Gtk;
    
    class MenuLeiste : public Window {
    public:
    	MenuLeiste();
    	virtual ~MenuLeiste();
    protected:
    	VBox _vBox;
    	MenuBar m_MenuBar;
    	Menu m_Menu_Datei;
    };
    
    /* MenuLeiste.cc */
    #include "MenuLeiste.hh"
    #include <gtkmm.h>
    using namespace Gtk;
    
    MenuLeiste::MenuLeiste() 
    {
    	add(_vBox);
    
    	// Füge Menu "Datei" zur Leiste hinzu
    	m_MenuBar.items().push_back( Menu_Helpers::MenuElem("Datei", m_Menu_Datei) );
    	_vBox.pack_start(m_MenuBar, PACK_SHRINK);
        show_all_children();
    }
    
    MenuLeiste::~MenuLeiste()
    {
    }
    
    #include <gtkmm/main.h>
    #include "InitFenster.hh"
    
    int main(int argc, char *argv[])
    {
      Gtk::Main kit(argc, argv);
    
      InitFenster fenster;
      Gtk::Main::run(fenster); 
    
      return 0;
    }
    


  • du musst die Menü-Leiste auch dem Fenster hinzufügen und show aufrufen 🙄



  • Hab ich doch 🙄



  • nö, wo?



  • MenuLeiste::MenuLeiste()  
    { 
        add(_vBox);  // <-- ADD Leiste
    
        // Füge Menu "Datei" zur Leiste hinzu 
        m_MenuBar.items().push_back( Menu_Helpers::MenuElem("Datei", m_Menu_Datei) ); 
        _vBox.pack_start(m_MenuBar, PACK_SHRINK); 
        show_all_children();  // <-- hier wird show aufgerufen
    } 
    
    MenuLeiste::~MenuLeiste() 
    { 
    }
    


  • Ich rede davon, dass du die Menüleiste dem Fenster "add"en musst und nicht davon die vbox der Menüleiste hinzuzufügen 🙄



  • Ach man du Nasenbär, dass ist doch das hier:

    _vBox.pack_start(m_MenuBar, PACK_SHRINK);
    

    Und btw, wieso zeigst du mir nicht einfach wie du es genau meinst,
    aber das ist ja egal, weil ich es schon dem Fenster hinzugefügt habe! 🙂



  • du musst doch die Menuleite dem Fenster zuordnen. Einfach im ctor des Fensters noch folgendes machen

    InitFenster::InitFenster() {
      //...
      add(ml);
      ml.show();
      //...
    }
    


  • Geht nicht. Core Dump.

    InitFenster::InitFenster() 
    { 
        set_title("Editor"); 
        set_default_size(800, 600); 
    	add(ml);
    	ml.show();
    
    } 
    .
    .
    .
    

    (ce:3043): Gtk-CRITICAL **: file gtkwidget.c: line 3944 (gtk_widget_set_parent): assertion `!GTK_WIDGET_TOPLEVEL (widget)' failed

    Gtk-ERROR **: file gtkcontainer.c: line 2389 (gtk_container_propagate_expose): assertion failed: (child->parent == GTK_WIDGET (container))
    aborting...
    Abort trap (core dumped)



  • Achso Menuleiste ist bei dir ein Gtk::Window. Du willst wohl aber ein Menü nehmen?

    schau am besten mal hier http://gtkmm.sourceforge.net/gtkmm2/docs/tutorial/html/ch10.html#id2881064


Anmelden zum Antworten