我有一个包含a的小部件QSpinBox
.这个小部件也有一个QVector
.我想这样做是让QSpinBox
显示发出值从Values
只.
起初我认为我的小部件中的新插槽和信号可以实现这一点,例如
插槽:
void ChangeSomeValue() { // QVectorValues; // 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
valueChanged
在我调用它的setValue之后发出另一个,导致无限循环(直到我的QVector
爆炸).
我仍然需要找到一种跟踪索引的方法,具体取决于QSpinBox
点击的箭头(向上或向下......我甚至认为这不可能).
所以我的解决方案及其问题似乎是一个死胡同.任何的想法?.QSpinBox
如果可能的话,我想坚持下去.
谢谢 !
[编辑]
子类:
class SpinBox : public QSpinBox { Q_OBJECT public: explicit SpinBox(const QVector& 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 mValues; int mIndex; };
Pete.. 6
我建议通过对QAbstractSpinBox进行子类化来编写自己的类.
也许看看这个问题上接受的答案: 如何子类化QSpinBox,使其可以将int64值作为最大值和最小值
我建议通过对QAbstractSpinBox进行子类化来编写自己的类.
也许看看这个问题上接受的答案: 如何子类化QSpinBox,使其可以将int64值作为最大值和最小值