wxWidgets: Seltsames Verhalten vom wxNotebook



  • Hallo,
    ich fummel hier gerade an dem wxNotebook herum..
    Erstmal der relevante Code aus meinem MyFrame-'Konstrukteur':

    wxNotebook *book = new wxNotebook(this,wxID_ANY);
    wxPanel *panel = new wxPanel(book);
    wxButton *butt1 = new wxButton(panel,wxID_ANY,wxT("TESTEST"));
    book->AddPage(panel, "tab1", true);
    book->AddPage(panel, "tab2", false);
    

    Zugegeben etwas unsinnig. Und wenn ich verschiedene panels nehme, funktioniert auch alles. (Warum?!?)
    Aber was hier passiert, ist, dass die erste Seite "tab1" leer bleibt, also kein button angezeigt wird, bis ich zur 2. und wieder zurück gewechselt habe. Da hilft auch kein resize, oder Minimieren/Maximieren..
    Wenn ich direkt die 2. Seite anzeigen lasse ( book->AddPage(panel, "tab2", TRUE); ), ist der button der Seite sichtbar!
    Woran kann das liegen??

    Und noch eine Frage zur Haltbarkeit von Objekten:
    Sehe ich das richtig, dass, wenn ich ein Objekt dynamisch erzeuge und mir die Addresse in einem Zeiger merke, nur der Zeiger gelöscht wird, wenn das Programm den scope (Scope oder scope?! Denglisch ist schon 'ne schwere Sprache...) verlässt?!
    Anders kann ich mir nicht erklären, warum jeder die Objekte im Konstruktor erzeugt und diese danach noch existieren..
    Bzw. gibt es auch Objekt-Zeiger die in der MyFrame-Klasse direkt erzeugt werden müssen??



  • Jede Seite muss ein eigenes Panel sein. Oder ein anderes Widget deiner Wahl.
    Es reicht auch als bsp. ein multi line text control zu erzeugen und das als Seite einzufügen etc.

    Zum Scope:
    wxWidgets übernimmt die Verantwortung für Kindobjekte. Ansonsten würdest du hier ein Speicherleck erzeugen, da der erzeugte Speicherbereich nie gelöscht wird, der Zeiger aber, wie du sagtest, seine Gültigkeit verliert.



  • Hallo,
    ich danke dir für die Antwort. So langsam habe ich das Gefühl hier Privat-Patient zu sein. ..Offenbar bist du einer der wenigen hier, die sich mit WxWidgets auskennen.
    Anfangs fand ich es unübersichtlich, dann habe ich mich auf die Grundprinzipien von OOP besonnen, ich habe mit reinem C angefangen, und nun fängt es an sogar Spaß zu machen. WxWidgets nimmt einem schon viel ab, wenn man sich denn darauf einlässt.
    Und auch Danke für das Beispiel. Ich hätte bestimmt grundsätzlich ein panel erstellt. Meistens wird es wohl darauf hinaus laufen, wer braucht schon ein Tab das von einem button ausgefüllt wird...

    MfG,
    Klon457



  • Klon457 schrieb:

    Hallo,
    ich danke dir für die Antwort. So langsam habe ich das Gefühl hier Privat-Patient zu sein. ..Offenbar bist du einer der wenigen hier, die sich mit WxWidgets auskennen.
    Anfangs fand ich es unübersichtlich, dann habe ich mich auf die Grundprinzipien von OOP besonnen, ich habe mit reinem C angefangen, und nun fängt es an sogar Spaß zu machen. WxWidgets nimmt einem schon viel ab, wenn man sich denn darauf einlässt.
    Und auch Danke für das Beispiel. Ich hätte bestimmt grundsätzlich ein panel erstellt. Meistens wird es wohl darauf hinaus laufen, wer braucht schon ein Tab das von einem button ausgefüllt wird...

    MfG,
    Klon457

    Richtig, es kommt halt darauf an, was man genau möchte und was das Ziel ist.
    Ich empfehle dir, dich mal mit wxRC und wxFormBuilder auseinanderzusetzen.
    Das gibt dir die Möglichkeit Widgets per XML zu laden und die Panels visuell zu erstellen. Man kann zwar auch Code generieren, aber wxRC ist IMHO angenehmer, weil man die Binary nicht neu erstellen muss. Aber das kann man sich auch aufheben bis man wxWidgets komplett verstanden hat.

    Nebenbemerkung: Ich benutze wxWidgets schon immer als GUI Library. Ich bin mit QT nie warm geworden. War mir zu umständlich 🕶 🤡


Anmelden zum Antworten