我是一名有用的助手,可以将文本翻译成中文。以下是需要翻译的内容:
但是,接下来出现了几个问题:
谢谢!
我有一个包含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) ) );
但是,接下来出现了几个问题:
- 我调用setValue后,QSpinBox会发出另一个valueChanged信号,导致无限循环(直到我的QVector炸裂)。
- 我仍然需要找到一种方法来跟踪Index,具体取决于点击哪个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;
};