如何更改QTimeEdit的步长?

时间:2019-03-31 21:00:25

标签: c++ qt qt5 qtimeedit

QSpinBox具有singleStep属性,该属性确定在按下逐步上/下按钮时值会改变多少。我正在QTimeEdit

中寻找类似行为
auto t = new QTimeEdit ();
t->setDisplayFormat ("m:ss.zzz");
t->setTime ({0,0,1,234});

如果我按此小部件上的上/下箭头,则时间每次更改1分钟。我想一步一步改为100ms。

如何?

1 个答案:

答案 0 :(得分:0)

如果要更改步骤,则必须覆盖stepBy()方法。

在下一部分中,如果当前部分为MSecSection,则将步长更改为100ms,在其他部分中,保留默认步长:

#include <QtWidgets>

class TimeEdit: public QTimeEdit
{
public:
    using QTimeEdit::QTimeEdit;
    void stepBy(int steps) override{
        if(currentSection() == MSecSection){
            setTime(time().addMSecs(steps*100));
            return;
        }
        QTimeEdit::stepBy(steps);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    TimeEdit t;
    t.setDisplayFormat ("m:ss.zzz");
    t.setTime ({0,0,1,234});
    t.show();
    return a.exec();
}

下一个示例是,如果您希望任何部分的步长为100 ms:

#include <QtWidgets>

class TimeEdit: public QTimeEdit
{
public:
    using QTimeEdit::QTimeEdit;
    void stepBy(int steps) override{
        setTime(time().addMSecs(steps*100));
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    TimeEdit t;
    t.setDisplayFormat ("m:ss.zzz");
    t.setTime ({0,0,1,234});
    t.show();
    return a.exec();
}