Set string to QDoubleSpinBox

3.6k views Asked by At

Regarding some task I must do the following. Consider I have a QDoubleSpinBox with positive values from 0 to 1000. And every time when user tries to lower the value of spinbox, f.e. to click the down button when value is 0, the value of spinbox must be string "unset". I tried to do this, to clear the value of spinbox and then setPrefix. But it did not worked. Any other solutions?

3

There are 3 answers

2
pezy On BEST ANSWER

You can try specialValueText.

This is a example:

#include <QApplication>
#include <QDoubleSpinBox>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QDoubleSpinBox doubleSpinBox;
    doubleSpinBox.setRange(0.f, 1000.f);
    doubleSpinBox.setValue(1.f);
    doubleSpinBox.setSpecialValueText("unset");

    doubleSpinBox.show();
    return a.exec();
}

when value is 0, the value of spinbox must be string "unset".

0
Robert On

There are two solutions to achieve what you want.

As pezy in the other answer says using setSpecialValueText where the text is shown when the current value() == minimum() of the spinbox

or a bit more powerful: subclass QSpinBox and override following functions:

int valueFromText(const QString &text) const;
QString textFromValue(int value) const;
QValidator::State validate(QString & input, int & pos) const;

Have a look here, trying something similar QSpinBox enter NaN as a valid value.

0
Pratham On

Sub class QSpinBox and define your behavior.
Take a look at this example