Как установить QDoubleSpinBox в научную нотацию? - PullRequest
0 голосов
/ 21 января 2019

QDoubleSpinBox показывает число с использованием десятичной точки по умолчанию

number in decimal point notation

, и я пытаюсь отформатировать его в научную нотацию

number in scientific notation

Мое решение заключалось в подклассе 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, и возвращает действительное или недействительное состояние в зависимости от того, было ли это преобразование успешным или нет.Он даже не использует позицию.

Есть ли способ проверить строку в научной нотации "чище"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...