[gelöst] Mit Tab aus einem QDateTimeEdit Widget rausspringen



  • Hallo C/C++ Forum,

    gibt es eine Möglichkeit mittels der Tabulator-Taste ein QDateTimeEdit Widget zu verlassen?

    Was ich suche ist so etwas wie die setTabChangesFocus() der Klasse QTextEdit, nur eben für QDateTimeEdit. Wenn es bereits ein Datum enthält dann Tabt es die einzelnen Werte durch und springt am Ende erst zum nächsten Widget. Wenn aber überhaupt kein Wert enthalten ist dann springt er garnicht mehr raus.

    Ich möchte sofort rausspringen können, ohne das ich irgend ein Pseudo-Wert eintragen muss, hattet ihr schonmal diesen Fall bzw. wisst ihr weiter?

    Bedanke mich schonmal im voraus!



  • Programmers' Day sei Dank habe ich es hingekriegt, trotzdem vielen Dank fürs lesen, ich werde meine Lösung morgen hineineditieren.

    edit:

    Ich machs doch jetzt gleich, vielleicht gibt es ja von eurer Seite noch
    Verbesserungsvorschläge :

    class MyDateTimeEdit: public QDateTimeEdit
    {
    public:
        void setFocusOnNextWidget(QWidget *w);
    protected:
        void keyPressEvent(QKeyEvent *event);
    private:
        QWidget* widgetToFocus;
    };
    
    void MyDateTimeEdit::setFocusOnNextWidget(QWidget *w)
    {
        this->widgetToFocus = w;
    }
    
    void MyDateTimeEdit::keyPressEvent(QKeyEvent *event)
    {
        if(event->key()==Qt::Key_Tab)
        {
            this->widgetToFocus->setFocus();
        }
    }
    
    ....
    
    MyDateTimeEdit *dateEdit = new MyDateTimeEdit();
    ....
    dateEdit->setFocusOnNextWidget(pButton);
    


  • Bei solchen simplen Anpassungen des Verhaltens ist ableiten ist bei Qt nicht nötig. Einfach QDateTimeEdit verwenden und einen eventFilter installieren (Doku -> nach eventFilter suchen).

    Wenn es ein privates Projekt ist, ist so eine Anpassung der Navigation durchaus möglich. Bei öffentlichen Projekten wäre ich auf der Hut, da diese Tab-Navigation deinem persönlichen Geschmack entspricht, andere (wie ich etwa) die von Qt angebotene um einiges besser finden. Wenn du das QDateTimeEdit anbietest, soll der User ja auch was darin eintragen, was üblicherweise ein Verändern mindestens eines der DateTime-Werte bedeutet. Mit Tab spring ich einfach ruckzuck durch das Widget. Und wer es überspringen will, weiß dass er mit 5x schnell auf "TAB" hämmern beim nächsten Widget ist.



  • Hast recht, mit eventFilter gehts auch und ist in diesem Fall sogar besser, da das dann bei unserem Projekt bei der Arbeit dann geklappt hat.

    Wichtiger war das es rausspringt wenn das DateTimeEdit keine Werte enthält ( also wenn isNull() von QDate true zurückliefert ), das fehlt halt jetzt in meinem Posting oben.

    Danke aber trotzdem für deinen Vorschlag Sabrina!


Anmelden zum Antworten