Qt QSpinBox с набором предопределенных значений - PullRequest
3 голосов
/ 13 апреля 2019

У меня есть QSpinBox, который должен принимать только набор дискретных значений (скажем, 2, 5, 10).Я могу setMinimum(2) и setMaximum(10), но не могу setSingleStep, потому что у меня есть шаг 3 и один из 5.

Есть ли другой виджет, который я могу использовать, но с тем же пользовательским интерфейсомкак QSpinBox?

Если нет, то что мне перезаписать для достижения желаемого эффекта?

1 Ответ

3 голосов
/ 13 апреля 2019

Используйте QSpinBox::stepsBy() для обработки значений.

Например:

class Spinbox: public QSpinBox
{
public:
    Spinbox(): QSpinBox()
    {
        acceptedValues << 0 << 3 << 5 << 10; // We want only 0, 3, 5, and 10
        setRange(acceptedValues.first(), acceptedValues.last());

    }
    virtual void stepBy(int steps) override
    {
        int const index = std::max(0, (acceptedValues.indexOf(value()) + steps) % acceptedValues.length()); // Bounds the index between 0 and length
        setValue(acceptedValues.value(index));
    }
private:
    QList<int> acceptedValues;
};
...