如何更改 QTimeEdit 的步长?

How can I change the step size of QTimeEdit?

QSpinBox 有一个 singleStep 属性,它确定按下步骤 up/down 按钮时值的变化量。我正在 QTimeEdit

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

如果我按此小部件上的 up/down 箭头,时间会每次更改 1 分钟。我想一步一步改为 100 毫秒。

怎么做?

如果您想更改步骤,您必须覆盖 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 毫秒:

#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();
}