Как я могу изменить размер шага QTimeEdit? - PullRequest
1 голос
/ 01 апреля 2019

QSpinBox имеет свойство singleStep, которое определяет, насколько сильно изменяется значение при нажатии кнопок перемещения вверх / вниз. Я ищу аналогичное поведение в QTimeEdit

auto t = new QTimeEdit ();
t->setDisplayFormat ("m:ss.zzz");
t->setTime ({0,0,1,234});

Если я нажимаю стрелки вверх / вниз на этом виджете, время меняется на 1 минуту за раз. Я хочу шаг за шагом, например 100 мс.

Как?

1 Ответ

0 голосов
/ 01 апреля 2019

Если вы хотите изменить шаг, вы должны перезаписать метод stepBy().

В следующей части я изменяю шаг на 100 мс, если текущий раздел равен MSecSection, в других разделах поддерживается шаг по умолчанию:

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