首页 > 解决方案 > 带有一组预定义值的 Qt QSpinBox

问题描述

我有一个QSpinBox应该只接受一组离散值(比如说 2、5、10)。我可以setMinimum(2)setMaximum(10)但我不能,setSingleStep因为我有 3 步和 5 步之一。

我可以使用不同的小部件,但它的 UI 与QSpinBox?

如果没有,我应该覆盖什么才能达到预期的效果?

标签: qtqspinbox

解决方案


用于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;
};

推荐阅读