QDoubleSpinBox
показывает число с использованием десятичной точки по умолчанию
, и я пытаюсь отформатировать его в научную нотацию
Мое решение заключалось в подклассе QDoubleSpinBox
и переопределении методов validate
, valueFromText
и textFromValue
.
class SciNotDoubleSpinbox : public QDoubleSpinBox
{
Q_OBJECT
public:
explicit SciNotDoubleSpinbox(QWidget *parent = 0) : QDoubleSpinBox(parent) {}
// Change the way we read the user input
double valueFromText(const QString & text) const
{
double numFromStr = text.toDouble();
return numFromStr;
}
// Change the way we show the internal number
QString textFromValue(double value) const
{
return QString::number(value, 'E', 6);
}
// Change the way we validate user input (if validate => valueFromText)
QValidator::State validate(QString &text, int&) const
{
// Try to convert the string to double
bool ok;
text.toDouble(&ok);
// See if it's a valid Double
QValidator::State validationState;
if(ok)
{
// If string conversion was valid, set as ascceptable
validationState = QValidator::Acceptable;
}
else
{
// If string conversion was invalid, set as invalid
validationState = QValidator::Invalid;
}
return validationState;
}
};
Itработает, но validate
кажется небрежным.Он пытается преобразовать число в удвоенное значение, используя Qt toDouble
, и возвращает действительное или недействительное состояние в зависимости от того, было ли это преобразование успешным или нет.Он даже не использует позицию.
Есть ли способ проверить строку в научной нотации "чище"?