QT SIGNAL/SLOT --> wxWidgets ?



  • Hallo,

    ich programmiere ursprünglich mit dem Qt Framework.

    Nun habe ich hier ein Projekt, welches wxWidgets benutzt. Dort sind versch. Karteireiter/Tabs welche alle eine Checkbox haben, ob diese aktuelle Tab aktiviert sein soll oder nicht. Ich würde gerne wissen ohne dass ich eine Karteikarte/Tab auswähle ob die Checkboxen der Tabs jeweils gesetzt sind oder nicht (z.B. der Text auf der Karteikarte fett oder mit Stern am ende usw.).

    In Qt kein problem:

    connect (checkbox, stateChanged(int), myTab, own_update_slot_method(int));
    //..
    void MyClass::own_update_slot_method(int mode){
       if (mode > 0) myTab->setTabText("MeinTab*");
       else myTab->setTabText("MeinTab");
    }
    

    DEr Qt SIGNAL/SLOT mechnismus in wxWidgets geht mit
    BEGIN_EVENT_TABLE(MyClass, ?)
    END_EVT_TABLE()

    ? oder?

    Thnx und Mfg Paul



  • Normalerweise nutzt wxWidgets statische Ereignistabellen wie zb auch MFC, das hat nichts mit dem Signal/Slot-System wie zb bei Qt zu tun.

    Du kannst aber in wx auch dynamisch Ereignis mit Empfänger verknüpfen wie bei Qt mittels Connect(...):
    http://docs.wxwidgets.org/2.8/wx_wxevthandler.html#wxevthandlerconnect



  • Ich würde es dann gerne wxTypishc machen. Erstmal reicht es mir eine Tab zum Laufen bringen.. Bis jetzt erfolglos (breakpoint greift nie).

    --> HEADER

    enum {
    BLA_ID = wxID_HIGHEST +1,
    TEST_CHKB_ID}
    //..
    void OnToggle(wxCommandEvent& WXUNUSED(event));
    //..
    

    --> SOURCE

    //..
    wxNotebookPage *p = new wxNotebookPage(...);
    p->setID(TEST_CHKB_ID);
    //..
    void X::OnToggle(wxCommandEvent& WXUNUSED(event)){
    // breakpoint
    }
    //
    BEGIN_EVT_TABLE(X,Y)
    // anderes Zeug steht schon da
    EVT_CHECKBOX(TEST_CHKB_ID, X::OnToggle)
    END_EVT_TABLE()
    

    Habe ich die ID vom NotebookPage richtig gesetzt??



  • Die ID soll man nicht nachträglich mit SetID ändern, sondern gleich beim Erzeugen angeben:

    wxNotebookPage *p = new wxNotebookPage( parent, ID, ...);

    Update:
    Und bei dir hat die Checkbox die gleiche ID wie wxNotebookPage? Das geht nicht.



  • Ok Danke! Fehler behoben, musste die ID richtig der Checkbox übergeben.

    Andere Frage: Kann ich den Text im Reiter (gesetzt mit wxNotebook::setPageText()) bunt, fett und/oder kursiv etc. machen?



  • Auf jeden Fall tut sich SO nichts:

    void MyClass::OnToggle(wxCommandEvent& WXUNUSED(event)){
    	wxFont oldFont = d_noteBook->GetPage(2)->GetFont();
    	oldFont.SetWeight(wxFONTWEIGHT_BOLD);
    	oldFont.SetStyle(wxFONTSTYLE_ITALIC);
    	d_noteBook->GetPage(2)->SetFont( oldFont );
    }
    


  • du musst bestimmt den Font von wxNotebook selbst ändern, nicht von der Page.



  • Guten Morgen.

    In der tat ändert das nun die Fonts des wxNotebooks, jedoch alle Tabs gleichermaßen.

    Jedoch möchte ich gerne die Tabs voneinander verschieden einfärben, fett, kursiv etc. Anscheinend geht dies nicht?



  • Ich habe mal in den wx-Source geschaut und glaube zu 90% das man nur alle Tabs ändern kann. Wenns wirklich nicht möglich ist, dann musst du halt deine eigene Notebook-Klasse von wxNotebook ableiten und das selbst implementieren.



  • Ok ich danke!

    Ne ich werde dann wohl einfach Icons einbauen. DIe kann ich ja für jedes Tab einzeln setzen..


Anmelden zum Antworten