Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将QDoubleSpinBox设置为科学记数法?_C++_Qt - Fatal编程技术网

C++ 如何将QDoubleSpinBox设置为科学记数法?

C++ 如何将QDoubleSpinBox设置为科学记数法?,c++,qt,C++,Qt,QDoubleSpinBox默认情况下使用小数点显示数字 我正试图将其格式化为科学符号 我的解决方案是将QDoubleSpinBox子类化,并重新定义方法validate、valueFromText和textFromValue class SciNotDoubleSpinbox : public QDoubleSpinBox { Q_OBJECT public: explicit SciNotDoubleSpinbox(QWidget *parent = 0) : QDoub

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;
    }
};
它可以工作,但是
validate
看起来很草率。它尝试使用Qt的
toDouble
将数字转换为double,并根据转换是否成功返回有效或无效状态。它甚至不使用这个位置


有没有一种方法可以以“更干净”的方式验证科学记数法中的字符串?

您看到了吗?它向我暗示(基于肤浅的略读!)你的解决方案比你想象的更干净,或者你的解决方案没有考虑所有的情况。@eclarkso,是的。我用这个解决方案作为灵感,但它重新实现了太多东西。根据您最初的问题,我会将
ok
初始化为
true
false
,您可以将最后一部分缩短为
返回ok?QValidator::可接受:QValidator::无效。但这是否真的正确(或者旧的讨论做了太多事情)取决于你的目标/需要。我怀疑是所有的边缘案例(包括用户界面/可用性)直接编辑旋转框中的文本驱动了旧讨论和常规
QDoubleSpinBox
中的所有代码,我怀疑您的版本是过于宽松、过于限制或两者兼而有之的组合。