Eduard Rostomyan
Eduard Rostomyan

Reputation: 6566

Set string to QDoubleSpinBox

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?

Upvotes: 6

Views: 3996

Answers (3)

Robert
Robert

Reputation: 1343

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.

Upvotes: 6

pezy
pezy

Reputation: 1088

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".

Upvotes: 11

Pratham
Pratham

Reputation: 1723

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

Upvotes: -1

Related Questions