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
中的所有代码,我怀疑您的版本是过于宽松、过于限制或两者兼而有之的组合。