Pointer Trouble...

  • Hab gerade ein Wenig Probleme mit Pointern auf eSetupWindows und eWindows. Ich instantiiere in plugin_exec() ein eSetupWindow folgendermaßen:


    Code
    eMenu *dlg = new eMenu();
    dlg->show();
    dlg->exec();
    dlg->hide();
    delete dlg;
    dlg = 0;


    Die eMenu- Klasse sieht so aus:


    Code
    eMenu::eMenu():eSetupWindow(_("Menu"), 3, 280)
    {
    int entry = 0;
    CONNECT_2_1((new eListBoxEntryMenu(&list, (_("Open First Window")), eString().sprintf("(%d) %s", ++entry, _("foo"))))->selected, eMenu::createMyWindow, new FirstWindow);
    CONNECT_2_1((new eListBoxEntryMenu(&list, (_("Open Second Window")), eString().sprintf("(%d) %s", ++entry, _("foo"))))->selected, eMenu::createMyWindow, new SecondWindow);
    setupHook(this, &entry);
    }


    createMyWindow ist eine Funktion, die ich gernen benutzen möchte um beliebige neue Fenster zu erzeugen, damit das Ganze dynamisch funktioniert, sie sieht so aus:


    Code
    void eMenu::createMyWindow(eWidget *w)
    {
    this->hide();
    w->show();
    w->exec();
    w->hide();
    this->show();
    delete w;
    }


    Soweit so gut, allerdings verabschiedet sich enigma immer, wenn ich einen Menüpunkt wähle, FirstWindow oder SecondWindow erscheint, zugeht und ich es erneut aufrufe - und ich hab keinen Plan darum - an den Fenstern selbst liegt es nicht, da wenn ich die Windows nicht mit new instantiiere alles wunderbar klappt. Also wenn ich alle Fenster so aufrufe:


    Code
    eMenu dlg;
    dlg.show();
    dlg.exec();
    dlg.hide();


    stürzt gar nichts ab, ABER das ganze ist dadurch natürlich nicht mehr so schön dynamisch machbar, wie ich mir das vorstelle, sprich man braucht für jeden Menüpunkt eine Callbackfunktion, in der obere Codeblock ausgeführt wird, was zu sehr viel in meinen Augen redundantem Code führt.


    Hat jemand ne Ahnung was da falsch läuft, oder lassen sich eSetupWindow und Konsorten generell nicht problemlos per new erzeugen?

  • Sooo, es geht nun


    Enigma mag wohl das delete nicht und heut morgen war mir das auch sofort klar... War wohl bisschen spät gestern :winking_face:


    Naja, hab jetzt ne wunderbare "generische" eWindowOpener Klasse, von der alle Menüs erben, die Fenster öffnen, darin ist die openWindow Funktion definiert - funktioniert perfekt und meine Code für das Menü ist 1/2 kürzer