我有一个包含QSpinBox
. 这个小部件也有一个QVector<int> Values
. 我想做的是获取仅QSpinBox
显示从Values
.
起初我认为我的小部件中的新插槽和信号可以解决问题,例如
投币口 :
void ChangeSomeValue()
{
// QVector<int> Values;
// int Index;
int val = Values[ Index ];
emit( SomeValueChanged( val ) );
}
连接:
connect( UI->MySpinBox, SIGNAL( valueChanged(int) ), this, SLOT( ChangeSomeValue() ) );
connect( this, SIGNAL( SomeValueChanged(int ) ), UI->MySpinBox, SLOT( setValue(int) ) );
但随后出现了几个问题:
QSpinBox
在我调用它的 setValue 后发出另一个valueChanged
,导致无限循环(直到我QVector
爆炸)。- 我仍然必须找到一种方法来跟踪索引,具体取决于
QSpinBox
单击了哪个箭头(向上或向下......我什至认为这是不可能的)。
因此,我的解决方案及其问题似乎是一条死胡同。任何想法?。QSpinBox
如果可能的话,我想坚持下去。
谢谢 !
[编辑]
子类化:
class SpinBox : public QSpinBox
{
Q_OBJECT
public:
explicit SpinBox(const QVector<int> & values, QWidget * parent = 0) :
QSpinBox(parent),
mValues(values),
mIndex(0)
{
qSort(mValues);
setMinimum(mValues.at(0));
setMaximum(mValues.at(mValues.size() - 1));
setValue(mValues.at(0));
}
protected:
void stepBy(int steps) // re-implementaion
{
mIndex += steps;
mIndex = qBound(0, mIndex, mValues.size() - 1);
setValue(mValues.at(mIndex));
}
private:
QVector<int> mValues;
int mIndex;
};