Gui: more fixes of DlgSettingsColorGradientImp:

* make sure that DlgSettingsColorGradientImp::setRange() generates a valid string according to the validator settings
* change back to QLineEdit::editingFinished because for huge models an immediate update considerably slows down editing
This commit is contained in:
wmayer
2022-04-04 11:43:43 +02:00
parent ed582bbecd
commit b9dee98063
2 changed files with 23 additions and 10 deletions

View File

@@ -48,6 +48,7 @@ using namespace Gui::Dialog;
DlgSettingsColorGradientImp::DlgSettingsColorGradientImp(const App::ColorGradient& cg,
QWidget* parent, Qt::WindowFlags fl)
: QDialog( parent, fl )
, validator(nullptr)
, ui(new Ui_DlgSettingsColorGradient)
{
ui->setupUi(this);
@@ -58,12 +59,10 @@ DlgSettingsColorGradientImp::DlgSettingsColorGradientImp(const App::ColorGradien
// the elementary charge is 1.6e-19, since such values might be the result of
// simulations, use this as boundary for a scientific validator
QDoubleValidator* maxValidator = new QDoubleValidator(-2e19, 2e19, ui->spinBoxDecimals->maximum(), this);
maxValidator->setNotation(QDoubleValidator::ScientificNotation);
ui->floatLineEditMax->setValidator(maxValidator);
QDoubleValidator* minValidator = new QDoubleValidator(-2e19, 2e19, ui->spinBoxDecimals->maximum(), this);
minValidator->setNotation(QDoubleValidator::ScientificNotation);
ui->floatLineEditMin->setValidator(minValidator);
validator = new QDoubleValidator(-2e19, 2e19, ui->spinBoxDecimals->maximum(), this);
validator->setNotation(QDoubleValidator::ScientificNotation);
ui->floatLineEditMax->setValidator(validator);
ui->floatLineEditMin->setValidator(validator);
// assure that the LineEdit is as wide to contain numbers with 4 digits and 6 decimals
QFontMetrics fm(ui->floatLineEditMax->font());
@@ -100,10 +99,10 @@ void DlgSettingsColorGradientImp::setupConnections()
connect(ui->checkBoxInvisible, &QCheckBox::toggled,
this, &DlgSettingsColorGradientImp::colorModelChanged);
connect(ui->floatLineEditMax, &QLineEdit::textEdited,
connect(ui->floatLineEditMax, &QLineEdit::editingFinished,
this, &DlgSettingsColorGradientImp::colorModelChanged);
connect(ui->floatLineEditMin, &QLineEdit::textEdited,
connect(ui->floatLineEditMin, &QLineEdit::editingFinished,
this, &DlgSettingsColorGradientImp::colorModelChanged);
}
@@ -188,11 +187,24 @@ bool DlgSettingsColorGradientImp::isOutInvisible() const
void DlgSettingsColorGradientImp::setRange(float fMin, float fMax)
{
auto toString = [=](float value, int decimals) {
int pos = 0;
while (decimals > 0) {
QString str = QLocale().toString(value, 'g', decimals--);
if (validator->validate(str, pos) == QValidator::Acceptable) {
return str;
}
}
return QLocale().toString(value, 'g', 1);
};
ui->floatLineEditMax->blockSignals(true);
ui->floatLineEditMax->setText(QLocale().toString(fMax, 'g', numberOfDecimals()));
ui->floatLineEditMax->setText(toString(fMax, numberOfDecimals()));
ui->floatLineEditMax->blockSignals(false);
ui->floatLineEditMin->blockSignals(true);
ui->floatLineEditMin->setText(QLocale().toString(fMin, 'g', numberOfDecimals()));
ui->floatLineEditMin->setText(toString(fMin, numberOfDecimals()));
ui->floatLineEditMin->blockSignals(false);
}

View File

@@ -95,6 +95,7 @@ Q_SIGNALS:
void colorModelChanged();
private:
QDoubleValidator* validator;
std::unique_ptr<Ui_DlgSettingsColorGradient> ui;
};