首页 > 解决方案 > 如何将 QDoubleSpinBox 设置为科学计数法?

问题描述

QDoubleSpinBox默认使用小数点显示数字

以小数点表示的数字

我正在尝试将其格式化为科学记数法

科学计数法中的数字

我的解决方案是子类化QDoubleSpinBox和重新定义方法validatevalueFromText并且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;
    }
};

它有效,但validate似乎草率。它尝试使用 Qt 将数字转换为双精度toDouble,并根据转换是否成功返回有效或无效状态。它甚至不使用位置。

有没有办法以“更干净”的方式验证科学计数法中的字符串?

标签: c++qt

解决方案


推荐阅读