具有一组预定义值的 Qt QSpinBox
Qt QSpinBox with a set of predefined values
我有一个 QSpinBox
,它应该只接受一组离散值(比如 2、5、10)。我可以 setMinimum(2)
和 setMaximum(10)
,但我不能 setSingleStep
,因为我有 3 步和 5 步之一。
是否有我可以使用的不同小部件,但它具有与 QSpinBox
相同的 UI?
如果没有,我应该覆盖什么才能达到预期的效果?
使用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;
};
我有一个 QSpinBox
,它应该只接受一组离散值(比如 2、5、10)。我可以 setMinimum(2)
和 setMaximum(10)
,但我不能 setSingleStep
,因为我有 3 步和 5 步之一。
是否有我可以使用的不同小部件,但它具有与 QSpinBox
相同的 UI?
如果没有,我应该覆盖什么才能达到预期的效果?
使用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;
};