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 :
QSpinBox
emittieren anderevalueChanged
nachdem ich call seine setValue, was in einer Endlosschleife (bis meinQVector
explodiert).- 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;
};
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Würde vorschlagen, das schreiben Ihrer eigenen Klasse, um es durch sub-classing QAbstractSpinBox.
Vielleicht werfen Sie einen Blick auf die akzeptierte Antwort auf diese Frage:
Wie um eine Unterklasse QSpinBox so könnte es haben int64-Werte als Maximum und minimum
Können Sie verhindern, dass dies mittels QObject::blockSignals(). Stellen Sie sicher, um die Blockierung Signale danach.
Gut, ich nehme an, Sie können speichern Sie den alten Wert in eine member-variable, und wenn QSpinBox strahlt
valueChanged()
können Sie einen Vergleich der neuen zu den alten Wert, um herauszufinden, ob die up-oder down-Pfeil gedrückt wurde.Sagte, ich weiß nicht, ob das reicht, um
QSpinBox
Verhalten, wie Sie wollen, korrigiert den Wert nach der änderung einmal ist ein bisschen hacky. UnterklassenQAbstractSpinbox
könnte besser sein, ja.