2017-11-08 4 views
2

Ich habe eine QTimeEdit Anzeige hh:mm.QTimeEdit Wie wird zur nächsten Stunde erhöht, wenn Minuten inkrementiert werden?

Dieses Widget Verhalten ist sehr ärgerlich: Wenn der Wert 09:59 ist, gibt es keine einfache Möglichkeit, zu 10:0010 zu verschieben. Die Spinbox-Steuerelemente auf der rechten Seite gelten nur für Minuten oder Stunden. Wenn Sie den Cursor auf Minuten setzen, ist das Inkrementieren nicht zulässig, wenn der Wert 59 ist.

Um 09:59-10:00 zu bewegen Sie 59 zu 00 und dann erhöhen 09 zu 10 ... das ist wirklich ärgerlich verringern müssen.

Gibt es keine Möglichkeit, es zu ermöglichen, Benutzer Schritt Minuten durch einen mit der Spinnbox Steuerung zu lassen und dann Wert 09:59-10:00 mit einem einzigen Klick verändert werden lassen ??

Antwort

1

Set wrapping bis true.

Wie für den automatischen Wechsel der Sektion Stunden, reimplementieren stepBy in einer Unterklasse von QTimeEdit wie folgt aus:

MyTimeEdit.h

#ifndef MYTIMEEDIT_H 
#define MYTIMEEDIT_H 

#include <QTimeEdit> 

class MyTimeEdit : public QTimeEdit 
{ 
    Q_OBJECT 
public: 
    explicit MyTimeEdit(QWidget *parent = nullptr); 

    void stepBy(int steps) override; 
}; 

#endif // MYTIMEEDIT_H 

MyTimeEdit.cpp

#include "MyTimeEdit.h" 

MyTimeEdit::MyTimeEdit(QWidget *parent) : QTimeEdit(parent) 
{ 
    setWrapping(true); 
} 

void MyTimeEdit::stepBy(int steps) 
{ 
    QTime cur = time(); 

    QTimeEdit::stepBy(steps); 

    if (currentSection() == QDateTimeEdit::MinuteSection) { 
     int m = cur.minute(); 
     if ((m == 0) && (steps < 0)) 
      setTime(time().addSecs(-3600)); 
     else if ((m == 59) && (steps > 0)) 
      setTime(time().addSecs(3600)); 
    } 
    else if (currentSection() == QDateTimeEdit::SecondSection) { 
     int s = cur.second(); 
     if ((s == 0) && (steps < 0)) 
      setTime(time().addSecs(-60)); 
     else if ((s == 59) && (steps > 0)) 
      setTime(time().addSecs(60)); 
    } 
} 
+0

Schön! Es ist eine Schande, dass wir diesen ganzen Code schreiben müssen. Besonders, wenn Sie möchten, dass dies auch mit Sekunden funktioniert ... und sogar noch mehr, wenn Sie möchten, dass dies mit 'QDateTimeEdit' funktioniert (wo Sie Tage automatisch nach Mitternacht erhöhen möchten) ... – jpo38

+0

@ jpo38, stimme ich voll und ganz zu mit dir. Dies sollte eine integrierte Funktionalität sein. – scopchanov

+1

Eingereicht qtbug: https://bugreports.qt.io/browse/QTBUG-64379 – jpo38

Verwandte Themen