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) |
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);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.