Bestimmte Werte festlegen, die in einem QSpinBox

Ich ein widget haben, mit einer QSpinBox. Dieses widget hat auch eine QVector<int> Values. Was ich möchte zu tun ist, erhalten die QSpinBox an-display ausgegebenen Werte von Values nur.

Zuerst dachte ich, dass ein neuer slot und signal in meinem widget würde den trick tun, so etwas wie

slot :

void ChangeSomeValue()
{
    //QVector<int> Values;
    //int Index;
    int val = Values[ Index ];
    emit( SomeValueChanged( val ) );
}

verbindet :

connect( UI->MySpinBox, SIGNAL( valueChanged(int) ), this, SLOT( ChangeSomeValue() ) );
connect( this, SIGNAL( SomeValueChanged(int ) ), UI->MySpinBox, SLOT( setValue(int) ) );

Aber dann mehrere Probleme :

  1. QSpinBox emittieren andere valueChanged nachdem ich call seine setValue, was in einer Endlosschleife (bis mein QVector explodiert).
  2. Ich noch einen Weg finden, Sie zu verfolgen, Index, je nachdem, welches der QSpinBox Pfeile geklickt wurde (nach oben oder unten... ich weiß nicht einmal glaube, das ist möglich).

Also meine Lösung, sich mit seinen Problemen, scheint in einer Sackgasse. Irgendeine Idee?. Ich würde gerne bleiben QSpinBox, wenn möglich.

Dank !

[BEARBEITEN]

Unterklassen :

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;
};
InformationsquelleAutor CTZStef | 2013-11-29
Schreibe einen Kommentar