本页内容

QDoubleSpinBox Class

QDoubleSpinBox 类提供了一个接受 double 类型参数的旋转框控件。更多内容...

头文件: #include <QDoubleSpinBox>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承自: QAbstractSpinBox

属性

公共函数

QDoubleSpinBox(QWidget *parent = nullptr)
virtual ~QDoubleSpinBox()
QString cleanText() const
int decimals() const
double maximum() const
double minimum() const
QString prefix() const
void setDecimals(int prec)
void setMaximum(double max)
void setMinimum(double min)
void setPrefix(const QString &prefix)
void setRange(double minimum, double maximum)
void setSingleStep(double val)
void setStepType(QAbstractSpinBox::StepType stepType)
void setSuffix(const QString &suffix)
double singleStep() const
QAbstractSpinBox::StepType stepType() const
QString suffix() const
virtual QString textFromValue(double value) const
double value() const
virtual double valueFromText(const QString &text) const

重新实现的公共函数

virtual void fixup(QString &input) const override
virtual QValidator::State validate(QString &text, int &pos) const override

公共插槽

void setValue(double val)

信号

void textChanged(const QString &text)
void valueChanged(double d)

详细说明

显示“双”的旋转框

QDoubleSpinBox 允许用户通过点击上下按钮,或按键盘上的“向上”或“向下”键来增加或减少当前显示的数值,从而选择一个值。用户也可以手动输入数值。该旋转框支持双精度数值,但可以通过validate()、textFromValue() 和valueFromText() 扩展为使用不同的字符串。

每当值发生变化时,QDoubleSpinBox 会发出valueChanged() 和textChanged() 信号,前者提供 double 类型值,后者提供QString 类型值。textChanged() 信号同时提供prefix() 和suffix() 类型的值。可通过value() 获取当前值,并通过setValue() 设置当前值。

注意:QDoubleSpinBox 会对数字进行四舍五入,以便以当前精度显示。在将小数位数设置为 2 的 QDoubleSpinBox 中,调用setValue(2.555) 将导致value() 返回 2.56。

点击上下按钮或使用键盘快捷键的向上和向下箭头,将以singleStep()指定的步长增减当前值。 若要更改此行为,可重写虚拟函数stepBy()。最小值、最大值和步长可通过构造函数之一进行设置,并可随后通过setMinimum()、setMaximum() 和setSingleStep() 进行修改。旋转框的默认精度为小数点后 2 位,但可通过setDecimals() 进行更改。

大多数旋转框都是方向性的,但 QDoubleSpinBox 也可以作为循环旋转框工作,即如果范围为 0.0-99.9 且当前值为 99.9,当wrapping() 被设置为 true 时,点击“向上”将返回 0。 若需循环行为,请使用setWrapping()。

显示的值可以在前面和后面添加任意字符串,例如表示货币或计量单位。 请参阅setPrefix() 和setSuffix()。旋转框中的文本可通过text() 获取(其中包含任何prefix() 和suffix()),或通过cleanText() 获取(其中不包含prefix()、suffix() 以及首尾空格)。

通常,除了数值范围之外,还希望为用户提供一个特殊的(通常是默认的)选项。有关如何在 QDoubleSpinBox 中实现这一点,请参阅setSpecialValueText()。

注意: QDoubleSpinBox 的显示值 (不包括可能的前缀和后缀内容)限制为 18 个字符。此限制旨在确保即使处理极大数值时,双精度旋转框仍能正常使用。

另请参阅 QSpinBox 、QDateTimeEdit 、QSlider 以及“旋转框示例”。

属性文档

[read-only] cleanText : QString

该属性包含旋转框中的文本内容,不包括任何前缀、后缀或首尾空格。

访问函数:

QString cleanText() const

另请参阅 text 、QDoubleSpinBox::prefix 以及QDoubleSpinBox::suffix 。

decimals : int

该属性用于设置旋转输入框的精度(以小数位数表示)

设置旋转输入框在显示和解释双精度数值时使用的有效数字位数。

警告: 由于 double 类型的限制,decimals 的最大值为 DBL_MAX_10_EXP + DBL_DIG(即 323)。

注意:更改此属性可能会导致最大值、最小值和数值发生变化。

访问函数:

int decimals() const
void setDecimals(int prec)

maximum : double

该属性存储自旋框的最大值

设置此属性时,系统会根据需要调整minimum ,以确保该范围仍然有效。

默认最大值为 99.99。

注意:最大值将进行四舍五入,以符合“小数位数”属性的设置。

访问函数:

double maximum() const
void setMaximum(double max)

另请参阅 decimals 和setRange()。

minimum : double

此属性存储自旋框的最小值

设置此属性时,系统会根据需要调整maximum ,以确保数值范围保持有效。

默认最小值为 0.0。

注意:最小值将被四舍五入,以符合“小数位数”属性的设置。

访问函数:

double minimum() const
void setMinimum(double min)

另请参阅 decimals 、setRange() 和specialValueText 。

prefix : QString

此属性用于存储旋转输入框的前缀

该前缀将附加在显示值的开头。典型用法是显示计量单位或货币符号。例如:

spinbox->setPrefix("$");

若要关闭前缀显示,请将此属性设置为空字符串。默认情况下不显示前缀。当 `value()` == `minimum()` 且 `specialValueText()` 被设置时,前缀将不显示。

如果未设置前缀,prefix() 将返回空字符串。

访问函数:

QString prefix() const
void setPrefix(const QString &prefix)

另请参阅 suffix()、setSuffix()、specialValueText() 和setSpecialValueText()。

singleStep : double

该属性用于存储步长值

当用户使用方向键更改旋转输入框的值时,该值将按 singleStep 的数值增量或减量。默认值为 1.0。将 singleStep 设置为小于 0 的值将不产生任何效果。

访问函数:

double singleStep() const
void setSingleStep(double val)

stepType : StepType

此属性用于指定步长类型。

步长类型可以是单步或自适应小数步长。

访问函数:

QAbstractSpinBox::StepType stepType() const
void setStepType(QAbstractSpinBox::StepType stepType)

suffix : QString

该属性存储自旋框的后缀

后缀将附加在显示值的末尾。典型用法是显示计量单位或货币符号。例如:

spinbox->setSuffix(" km");

若要关闭后缀显示,请将此属性设置为空字符串。默认情况下不显示后缀。若已设置 `specialValueText()`,则 `minimum()` 不会显示后缀。

如果未设置后缀,suffix() 将返回一个空字符串。

访问函数:

QString suffix() const
void setSuffix(const QString &suffix)

另请参阅 prefix()、setPrefix()、specialValueText() 和setSpecialValueText()。

value : double

该属性存储旋转输入框的值

如果新值与旧值不同,setValue() 将触发valueChanged() 信号。value 属性还有一个通知信号,其中包含旋转输入框的前缀和后缀。

注意:该值将进行四舍五入,以便根据当前的小数位数设置进行显示。

访问函数:

double value() const
void setValue(double val)

通知信号:

void valueChanged(double d)

另请参阅 decimals 。

成员函数文档

[explicit] QDoubleSpinBox::QDoubleSpinBox(QWidget *parent = nullptr)

创建一个旋转输入框,其最小值为 0.0,最大值为 99.99,步长为 1.0,精度为小数点后 2 位。初始值设为 0.00。该旋转输入框具有给定的parent 。

另请参阅 setMinimum()、setMaximum() 和setSingleStep()。

[virtual noexcept] QDoubleSpinBox::~QDoubleSpinBox()

析构函数。

[override virtual] void QDoubleSpinBox::fixup(QString &input) const

重新实现了:QAbstractSpinBox::fixup(QString &input) const。

void QDoubleSpinBox::setRange(double minimum, double maximum)

一种便捷函数,可通过单次函数调用设置minimum 和maximum 的值。

注意:最大值和最小值将被四舍五入,以符合小数点位数属性。

setRange(minimum, maximum);

等同于:

setMinimum(minimum);
setMaximum(maximum);

另请参阅 minimum 和maximum 。

void QDoubleSpinBox::setStepType(QAbstractSpinBox::StepType stepType)

将旋转框的步长类型设置为stepType ,即单步或自适应十进制步长。

自适应十进制步长意味着步长将持续调整为比当前value 低一个十的幂。因此,当值为1100时,步长设置为100,向上调整一次即增加到1200;当值为1200时,向上调整一次则变为1300。 对于负值,从-1100向下步进一次将变为-1200。

该机制也适用于任何小数值,例如 0.041 经过一次步进后会增加到 0.042。

系统会考虑步长方向以处理边界情况,因此从 100 向下步进时,值会变为 99 而不是 90。因此,先向上步进再向下步进——或反之——最终总会回到起始值;例如 99 -> 100 -> 99。

设置此选项将导致旋转框忽略singleStep 的值,尽管该值会被保留,以便在后续关闭自适应小数步长时,singleStep 能生效。

注意: 这是属性stepType 的设置 函数。

另请参阅 stepType()。

[signal] void QDoubleSpinBox::textChanged(const QString &text)

每当旋转框中的文本发生变化时,都会触发此信号。新文本将通过 `prefix()` 和 `suffix()` 传递给 `text `。

[virtual] QString QDoubleSpinBox::textFromValue(double value) const

每当旋转框需要显示给定的value 时,都会调用此虚拟函数。默认实现会返回一个字符串,其中包含使用QWidget::locale()打印的value 。该字符串通过toString()(value 、u'f' 、decimals())生成,并会去除千位分隔符,除非设置了setGroupSeparatorShown()。重写该函数时,可返回任意内容。

注意:QDoubleSpinBox 不会在调用specialValueText() 时调用此函数,且prefix() 和suffix() 均不应包含在返回值中。

若重写此函数,可能还需要重写valueFromText()。

另请参见 valueFromText() 和QLocale::groupSeparator()。

[override virtual] QValidator::State QDoubleSpinBox::validate(QString &text, int &pos) const

重写了:QAbstractSpinBox::validate(QString &input, int &pos) const。

[signal] void QDoubleSpinBox::valueChanged(double d)

每当旋转选择框的值发生变化时,都会触发此信号。新值将通过d 传递进来。

注意: 这是属性value 的通知器 信号。

[virtual] double QDoubleSpinBox::valueFromText(const QString &text) const

每当旋转框需要将用户输入的text 解释为一个值时,都会调用此虚拟函数。

需要以非数值形式显示旋转框值的子类,必须重写此函数。

注意:QDoubleSpinBox 会单独处理specialValueText();此函数仅处理其他值。

另请参阅 textFromValue() 和validate()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.