2017-11-08 10 views
2

私はQTimeEdithh:mmと表示しています。QTimeEdit分をインクリメントしたときに次の時間にインクリメントする方法は?

このウィジェットの動作は非常に面倒です:値が09:59の場合、10:00に簡単に移動する方法はありません。右のスピンボックスコントロールは数分または数時間に適用されます。カーソルを分単位で入力すると、値が59の場合は増分できません。あなたはそれが本当に迷惑なんだ... 0059をデクリメントし、その後1009をインクリメントする必要が10:0009:59から移動するに

ユーザーがスピンボックスコントロールを使用して分単位で増分し、値を09:59から10:00にワンクリックで変更できるようにするオプションはありませんか?

答えて

1

セットwrappingからtrueです。時間区間の自動変更について

、このようなのサブクラスQTimeEditstepByを再実装:

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

ニース!このコードをすべて記述しなければならないのは残念です。特にこれを秒単位で動作させたい場合は....さらに、 'QDateTimeEdit'(これは深夜の後に自動的に日数を増やすことができる)でスマートに動作させたい場合は... – jpo38

+0

@ jpo38、私は全く同意しますあなたと。これはビルトイン機能でなければなりません。 – scopchanov

+1

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

関連する問題