Skip to content

Commit 8886cc8

Browse files
authored
Merge pull request #89 from matwey/fix/spinbox_textedit
Fix ScientificSpinBox text edition
2 parents a9ed06b + 224d95a commit 8886cc8

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

include/scientificspinbox.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ class ScientificSpinBox: public QAbstractSpinBox {
5151
inline double minimum() const { return minimum_; }
5252
inline double maximum() const { return maximum_; }
5353

54+
private slots:
55+
void updateValueFromText();
56+
5457
public slots:
5558
void setValue(double value);
5659
inline void setMinimum(double min) { setRange(min, maximum_); }

src/scientificspinbox.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,15 @@ constexpr const int ScientificSpinBox::log10_steps_in_range_;
3030
ScientificSpinBox::ScientificSpinBox(QWidget* parent, int decimals):
3131
QAbstractSpinBox(parent),
3232
decimals_(decimals) {
33+
connect(this, SIGNAL(editingFinished()), this, SLOT(updateValueFromText()));
3334
const auto font = QFontDatabase::systemFont(QFontDatabase::GeneralFont);
3435
const auto family = font.family();
3536
}
3637

38+
void ScientificSpinBox::updateValueFromText() {
39+
setValue(valueFromText(text()));
40+
}
41+
3742
QSize ScientificSpinBox::sizeHint() const {
3843
const auto char_width = fontMetrics().averageCharWidth();
3944
// +1 for number sign, +1 for integer part, +1 for decimal point, + decimals() for decimals,
@@ -48,8 +53,11 @@ QSize ScientificSpinBox::minimumSizeHint() const {
4853
}
4954

5055
void ScientificSpinBox::setValue(double value) {
56+
const auto old_text = textFromValue(value_);
5157
const auto new_text = textFromValue(value);
52-
if (new_text == text()) return;
58+
if ((new_text == old_text) && (new_text == text())) {
59+
return;
60+
}
5361
value_ = valueFromText(new_text);
5462
lineEdit()->setText(new_text);
5563
emit valueChanged(value_);
@@ -90,15 +98,15 @@ double ScientificSpinBox::valueFromText(const QString& text) const {
9098
}
9199

92100
QValidator::State ScientificSpinBox::validate(QString& text, int&) const {
93-
const auto decimal_point = QString(locale().decimalPoint());
94-
const auto e = QString(locale().exponential());
95-
const auto minus = QString(locale().negativeSign());
96-
const auto plus = QString(locale().positiveSign());
97101
bool ok = false;
98102
locale().toDouble(text, &ok);
99103
if (ok) {
100104
return QValidator::Acceptable;
101105
}
106+
const auto decimal_point = QString(locale().decimalPoint());
107+
const auto e = QString(locale().exponential());
108+
const auto minus = QString(locale().negativeSign());
109+
const auto plus = QString(locale().positiveSign());
102110
if (text.isEmpty()) {
103111
return QValidator::Intermediate;
104112
}

0 commit comments

Comments
 (0)