У меня есть виджет, содержащий QSpinBox
. Этот виджет также имеет QVector<int> Values
. То, что я хотел бы сделать, это получить QSpinBox
для отображения значений, выданных от Values
только.Задайте определенные значения в QSpinBox
Сначала я подумал, что новый слот и сигнал в моем виджете будет делать трюк, что-то вроде
слот:
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
была нажата (вверх или вниз). Я даже не думаю, что это возможно).
Таким образом, мое решение, с его проблемами, похоже, является тупиком. Есть идеи?. Я бы хотел придерживаться QSpinBox
, если это возможно.
Спасибо!
[EDIT]
подклассов:
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;
};
Тогда может быть быстрее переключиться на что-то вроде QComboBox.Сначала я начал писать предлагаемый подкласс, но это выглядело как пустая трата времени. Спасибо, в любом случае ! – CTZStef
Ну, вероятно, это не пустая трата времени, если вы можете использовать этот класс много. Звучит очень полезно для меня. – Pete
Ну, я, вероятно, дам ему шанс на этой неделе, если найду какое-то время, чтобы сэкономить. Я отредактирую свой вопрос соответствующим образом. – CTZStef