を含むウィジェットがあり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
valueChanged
setValue を呼び出した後に別のものを発行すると、無限ループが発生します (QVector
爆発するまで)。QSpinBox
どちらの矢印がクリックされたか (上または下... これが可能だとは思いません)に応じて、まだ 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;
};