QAbstractSpinBox Class
QAbstractSpinBox 类提供了一个旋转框和一个行编辑框来显示值。更多内容...
| 头文件: | #include <QAbstractSpinBox> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 继承自: | QWidget |
| 继承自: |
公共类型
| enum | ButtonSymbols { UpDownArrows, PlusMinus, NoButtons } |
| enum | CorrectionMode { CorrectToPreviousValue, CorrectToNearestValue } |
| flags | StepEnabled |
| enum | StepEnabledFlag { StepNone, StepUpEnabled, StepDownEnabled } |
| enum | StepType { DefaultStepType, AdaptiveDecimalStepType } |
属性
|
|
公共函数
| QAbstractSpinBox(QWidget *parent = nullptr) | |
| virtual | ~QAbstractSpinBox() |
| Qt::Alignment | alignment() const |
| QAbstractSpinBox::ButtonSymbols | buttonSymbols() const |
| QAbstractSpinBox::CorrectionMode | correctionMode() const |
| virtual void | fixup(QString &input) const |
| bool | hasAcceptableInput() const |
| bool | hasFrame() const |
| void | interpretText() |
| bool | isAccelerated() const |
| bool | isGroupSeparatorShown() const |
| bool | isReadOnly() const |
| bool | keyboardTracking() const |
| void | setAccelerated(bool on) |
| void | setAlignment(Qt::Alignment flag) |
| void | setButtonSymbols(QAbstractSpinBox::ButtonSymbols bs) |
| void | setCorrectionMode(QAbstractSpinBox::CorrectionMode cm) |
| void | setFrame(bool) |
| void | setGroupSeparatorShown(bool shown) |
| void | setKeyboardTracking(bool kt) |
| void | setReadOnly(bool r) |
| void | setSpecialValueText(const QString &txt) |
| void | setWrapping(bool w) |
| QString | specialValueText() const |
| virtual void | stepBy(int steps) |
| QString | text() const |
| virtual QValidator::State | validate(QString &input, int &pos) const |
| bool | wrapping() const |
重新实现的公共函数
| virtual bool | event(QEvent *event) override |
| virtual QVariant | inputMethodQuery(Qt::InputMethodQuery query) const override |
| virtual QSize | minimumSizeHint() const override |
| virtual QSize | sizeHint() const override |
公共插槽
信号
| void | editingFinished() |
(since 6.10) void | returnPressed() |
受保护函数
| virtual void | initStyleOption(QStyleOptionSpinBox *option) const |
| QLineEdit * | lineEdit() const |
| void | setLineEdit(QLineEdit *lineEdit) |
| virtual QAbstractSpinBox::StepEnabled | stepEnabled() const |
重新实现的受保护函数
| virtual void | changeEvent(QEvent *event) override |
| virtual void | closeEvent(QCloseEvent *event) override |
| virtual void | contextMenuEvent(QContextMenuEvent *event) override |
| virtual void | focusInEvent(QFocusEvent *event) override |
| virtual void | focusOutEvent(QFocusEvent *event) override |
| virtual void | hideEvent(QHideEvent *event) override |
| virtual void | keyPressEvent(QKeyEvent *event) override |
| virtual void | keyReleaseEvent(QKeyEvent *event) override |
| virtual void | mouseMoveEvent(QMouseEvent *event) override |
| virtual void | mousePressEvent(QMouseEvent *event) override |
| virtual void | mouseReleaseEvent(QMouseEvent *event) override |
| virtual void | paintEvent(QPaintEvent *event) override |
| virtual void | resizeEvent(QResizeEvent *event) override |
| virtual void | showEvent(QShowEvent *event) override |
| virtual void | timerEvent(QTimerEvent *event) override |
| virtual void | wheelEvent(QWheelEvent *event) override |
详细说明
该类被设计为以下控件的通用超类:QSpinBox 、QDoubleSpinBox 以及QDateTimeEdit
该类的首要特性如下:
- text: 在 QAbstractSpinBox 中显示的文本。
- alignment:QAbstractSpinBox 中文本的对齐方式。
- wrapping:QAbstractSpinBox 是否从最小值循环到最大值,反之亦然。
QAbstractSpinBox 提供了一个虚拟函数stepBy(),每当用户触发步进操作时都会调用该函数。该函数接受一个整数值,表示执行了多少步。例如,按下Qt::Key_Down 会触发对stepBy(-1) 的调用。
当用户在按住Qt::ControlModifier 的同时触发步进时,QAbstractSpinBox 会以 10 为增量进行步进,而不是仅进行单次步进。此步进修饰符会影响滚轮事件、键盘事件以及与旋转框按钮的交互。请注意,在 macOS 上,Control 键对应于 Command 键。
自 Qt 5.12 起,可通过QStyle::SH_SpinBox_StepModifier 选择哪些Qt::KeyboardModifier 会提高步进速率。Qt::NoModifier 会禁用此功能。
QAbstractSpinBox 还提供了一个虚拟函数stepEnabled(),用于确定在任何位置是否允许增量增加或减少。该函数返回一个StepEnabled 的位集。
另请参阅 QAbstractSlider 、QSpinBox 、QDoubleSpinBox 、QDateTimeEdit 以及“旋转框示例”。
成员类型文档
enum QAbstractSpinBox::ButtonSymbols
此枚举类型描述了旋转框中的按钮上可以显示的符号。

| 常量 | 值 | 描述 |
|---|---|---|
QAbstractSpinBox::UpDownArrows | 0 | 经典风格的小箭头。 |
QAbstractSpinBox::PlusMinus | 1 | “+”和“-”符号。 |
QAbstractSpinBox::NoButtons | 2 | 不显示按钮。 |
另请参阅 QAbstractSpinBox::buttonSymbols 。
enum QAbstractSpinBox::CorrectionMode
此枚举类型描述了当编辑操作结束时,旋转框将采用何种模式来修正Intermediate 的值。
| 常量 | 值 | 描述 |
|---|---|---|
QAbstractSpinBox::CorrectToPreviousValue | 0 | 旋转框将恢复为最后一个有效值。 |
QAbstractSpinBox::CorrectToNearestValue | 1 | 旋转框将恢复为最接近的有效值。 |
另请参阅 correctionMode 。
enum QAbstractSpinBox::StepEnabledFlag
flags QAbstractSpinBox::StepEnabled
| 常数 | 值 |
|---|---|
QAbstractSpinBox::StepNone | 0x00 |
QAbstractSpinBox::StepUpEnabled | 0x01 |
QAbstractSpinBox::StepDownEnabled | 0x02 |
StepEnabled 类型是QFlags<StepEnabledFlag> 的 typedef。它存储 StepEnabledFlag 值的按“或”运算组合。
enum QAbstractSpinBox::StepType
| 常数 | 值 |
|---|---|
QAbstractSpinBox::DefaultStepType | 0 |
QAbstractSpinBox::AdaptiveDecimalStepType | 1 |
属性文档
accelerated : bool
此属性控制旋转框在按下“向上/向下”按钮时是否会加快步进频率。
如果启用此选项,按住“步长增加/减少”按钮的时间越长,旋转框中值的增减速度就越快。
访问函数:
| bool | isAccelerated() const |
| void | setAccelerated(bool on) |
[read-only] acceptableInput : bool
该属性表示输入是否满足当前的验证规则
访问函数:
| bool | hasAcceptableInput() const |
另请参阅 validate()、fixup() 和correctionMode 。
alignment : Qt::Alignment
此属性用于设置旋转框的对齐方式
可能的取值为Qt::AlignLeft 、Qt::AlignRight 和Qt::AlignHCenter 。
默认对齐方式为Qt::AlignLeft
尝试将对齐方式设置为非法的标志组合将不产生任何效果。
访问函数:
| Qt::Alignment | alignment() const |
| void | setAlignment(Qt::Alignment flag) |
另请参见 Qt::Alignment 。
buttonSymbols : ButtonSymbols
该属性保存当前的按钮符号模式
可能的取值包括UpDownArrows 或PlusMinus 。默认值为UpDownArrows 。
请注意,某些样式可能会将PlusMinus 和UpDownArrows 渲染为完全相同的外观。
访问函数:
| QAbstractSpinBox::ButtonSymbols | buttonSymbols() const |
| void | setButtonSymbols(QAbstractSpinBox::ButtonSymbols bs) |
另请参阅 ButtonSymbols 。
correctionMode : CorrectionMode
该属性用于在编辑完成后,对Intermediate 值进行校正的模式
默认模式为QAbstractSpinBox::CorrectToPreviousValue 。
访问函数:
| QAbstractSpinBox::CorrectionMode | correctionMode() const |
| void | setCorrectionMode(QAbstractSpinBox::CorrectionMode cm) |
另请参阅 acceptableInput 、validate() 和fixup()。
frame : bool
无论旋转框是否带有边框,此属性均有效
如果启用(默认),旋转框将在框架内显示;否则,旋转框将不显示任何框架。
访问函数:
| bool | hasFrame() const |
| void | setFrame(bool) |
keyboardTracking : bool
该属性表示该旋转输入框是否启用了键盘跟踪功能。
如果启用了键盘跟踪(默认设置),则在通过键盘输入新值时,旋转框会发出 valueChanged() 和 textChanged() 信号。
例如,当用户通过输入 6、0 和 0 来输入值 600 时,旋转框会分别发出 3 个信号,其值分别为 6、60 和 600。
如果禁用了键盘跟踪,则在输入过程中,spinbox 不会发出 valueChanged() 和 textChanged() 信号。它会在稍后发出这些信号,例如当按下回车键、失去键盘焦点或使用其他 spinbox 功能(如按下方向键)时。
访问函数:
| bool | keyboardTracking() const |
| void | setKeyboardTracking(bool kt) |
readOnly : bool
该属性用于指定旋转框是否为只读。
在只读模式下,用户仍可将文本复制到剪贴板,或对文本进行拖放操作;但无法对其进行编辑。
QAbstractSpinBox 中的QLineEdit 在只读模式下不会显示光标。
访问函数:
| bool | isReadOnly() const |
| void | setReadOnly(bool r) |
另请参阅 QLineEdit::readOnly 。
showGroupSeparator : bool
该属性用于控制千位分隔符是否启用。默认情况下,该属性的值为 false。
访问函数:
| bool | isGroupSeparatorShown() const |
| void | setGroupSeparatorShown(bool shown) |
specialValueText : QString
该属性存储特殊值文本
如果设置了此属性,当当前值等于minimum()时,旋转框将显示此文本而非数值。典型用法是用于指示该选项具有特殊(默认)含义。
例如,如果您的旋转框允许用户选择用于显示图像的缩放因子(或缩放级别),且您的应用程序能够自动选择一个能使图像完全适应显示窗口的值,您可以按以下方式配置旋转框:
QSpinBox *zoomSpinBox = new QSpinBox;
zoomSpinBox->setRange(0, 1000);
zoomSpinBox->setSingleStep(10);
zoomSpinBox->setSuffix("%");
zoomSpinBox->setSpecialValueText(tr("Automatic"));
zoomSpinBox->setValue(100);这样,用户就可以选择 1% 到 1000% 之间的缩放比例,或者选择“自动”让应用程序自行决定。此时,您的代码必须将旋转框中的值 0 解释为用户要求将图像缩放以完全适应显示窗口。
所有值都会显示前缀和后缀(如果已设置),但特殊值除外,它仅显示特殊值文本。该特殊文本通过QSpinBox::textChanged()信号传递,该信号传递一个QString 。
若要关闭特殊值文本的显示,请使用空字符串调用此函数。默认情况下不显示特殊值文本,即数值仍按常规方式显示。
如果未设置特殊值文本,specialValueText() 将返回空字符串。
访问函数:
| QString | specialValueText() const |
| void | setSpecialValueText(const QString &txt) |
[read-only] text : QString
此属性用于存储旋转输入框中的文本,包括任何前缀和后缀
没有默认文本。
访问函数:
| QString | text() const |
wrapping : bool
该属性用于控制旋转框是否为圆形。
如果循环选项为 true,则从 maximum() 值向上递增会跳转到 minimum() 值,反之亦然。只有在同时设置了 minimum() 和 maximum() 值时,循环选项才有效。
QSpinBox *spinBox = new QSpinBox(this);
spinBox->setRange(0, 100);
spinBox->setWrapping(true);
spinBox->setValue(100);
spinBox->stepBy(1);
// value is 0访问函数:
| bool | wrapping() const |
| void | setWrapping(bool w) |
另请参阅 QSpinBox::minimum() 和QSpinBox::maximum()。
成员函数文档
[explicit] QAbstractSpinBox::QAbstractSpinBox(QWidget *parent = nullptr)
根据给定的parent (默认值为wrapping )以及对齐属性,构建一个抽象的旋转框。
[virtual noexcept] QAbstractSpinBox::~QAbstractSpinBox()
当QAbstractSpinBox 被销毁时调用。
[override virtual protected] void QAbstractSpinBox::changeEvent(QEvent *event)
重写了:QWidget::changeEvent(QEvent *event)。
[virtual slot] void QAbstractSpinBox::clear()
清除行编辑框中除前缀和后缀以外的所有文本。
[override virtual protected] void QAbstractSpinBox::closeEvent(QCloseEvent *event)
重写了:QWidget::closeEvent(QCloseEvent *event)。
[override virtual protected] void QAbstractSpinBox::contextMenuEvent(QContextMenuEvent *event)
重写了:QWidget::contextMenuEvent(QContextMenuEvent *event)。
[signal] void QAbstractSpinBox::editingFinished()
编辑完成后会发出此信号。当旋转输入框失去焦点或按下回车键时,都会触发此信号。
[override virtual] bool QAbstractSpinBox::event(QEvent *event)
重写了:QWidget::event(QEvent *event)。
[virtual] void QAbstractSpinBox::fixup(QString &input) const
当按下“返回”键或调用interpretText()时,如果input 未被验证为QValidator::Acceptable ,则QAbstractSpinBox 会调用此虚拟函数。它将尝试修改文本使其有效。该函数在各个子类中被重新实现。
[override virtual protected] void QAbstractSpinBox::focusInEvent(QFocusEvent *event)
重写了:QWidget::focusInEvent(QFocusEvent *event)。
[override virtual protected] void QAbstractSpinBox::focusOutEvent(QFocusEvent *event)
重写了:QWidget::focusOutEvent(QFocusEvent *event)。
[override virtual protected] void QAbstractSpinBox::hideEvent(QHideEvent *event)
重写了:QWidget::hideEvent(QHideEvent *event)。
[virtual protected] void QAbstractSpinBox::initStyleOption(QStyleOptionSpinBox *option) const
使用QSpinBox 中的值初始化option 。当子类需要QStyleOptionSpinBox ,但又不想自己填写所有信息时,此方法非常有用。
另请参阅 QStyleOption::initFrom()。
[override virtual] QVariant QAbstractSpinBox::inputMethodQuery(Qt::InputMethodQuery query) const
重写了:QWidget::inputMethodQuery (Qt::InputMethodQuery query)const。
void QAbstractSpinBox::interpretText()
该函数负责解析旋转输入框中的文本。如果自上次解析以来该值发生了变化,它将发出信号。
[override virtual protected] void QAbstractSpinBox::keyPressEvent(QKeyEvent *event)
重写了:QWidget::keyPressEvent(QKeyEvent *event)。
该函数处理键盘输入。
具体处理以下键:
| Enter/Return | 即使自上次发出信号以来值未发生变化,该函数仍会重新解析文本并发出信号。 |
| 向上 | 这将调用stepBy(1) |
| 向下 | 这将调用stepBy(-1) |
| 向上翻页 | 这将调用stepBy(10) |
| 下一页 | 这将调用stepBy(-10) |
另请参阅 stepBy()。
[override virtual protected] void QAbstractSpinBox::keyReleaseEvent(QKeyEvent *event)
重写了:QWidget::keyReleaseEvent(QKeyEvent *event)。
[protected] QLineEdit *QAbstractSpinBox::lineEdit() const
该函数返回一个指向旋转框的行编辑框的指针。
另请参阅 setLineEdit()。
[override virtual] QSize QAbstractSpinBox::minimumSizeHint() const
重新实现了属性QWidget::minimumSizeHint 的访问函数。
[override virtual protected] void QAbstractSpinBox::mouseMoveEvent(QMouseEvent *event)
重写了:QWidget::mouseMoveEvent(QMouseEvent *event)。
[override virtual protected] void QAbstractSpinBox::mousePressEvent(QMouseEvent *event)
重写了:QWidget::mousePressEvent(QMouseEvent *event)。
[override virtual protected] void QAbstractSpinBox::mouseReleaseEvent(QMouseEvent *event)
重写了:QWidget::mouseReleaseEvent(QMouseEvent *event)。
[override virtual protected] void QAbstractSpinBox::paintEvent(QPaintEvent *event)
重写了:QWidget::paintEvent(QPaintEvent *event)。
[override virtual protected] void QAbstractSpinBox::resizeEvent(QResizeEvent *event)
重写了:QWidget::resizeEvent(QResizeEvent *event)。
[signal, since 6.10] void QAbstractSpinBox::returnPressed()
当按下 Return 或 Enter 键时,会发出此信号。
该功能自 Qt 6.10 起引入。
[slot] void QAbstractSpinBox::selectAll()
选中旋转输入框中的所有文本,但不包括前缀和后缀。
[protected] void QAbstractSpinBox::setLineEdit(QLineEdit *lineEdit)
将旋转框的行编辑控件设置为lineEdit ,而非当前的行编辑控件。lineEdit 不能是nullptr 。
QAbstractSpinBox 获取新对象的所有权lineEdit
如果lineEdit 的QLineEdit::validator()方法返回nullptr ,则spinbox的内部验证器将设置为该行编辑控件。
另请参阅 lineEdit()。
[override virtual protected] void QAbstractSpinBox::showEvent(QShowEvent *event)
重写了:QWidget::showEvent(QShowEvent *event)。
[override virtual] QSize QAbstractSpinBox::sizeHint() const
重新实现了属性QWidget::sizeHint 的访问函数。
[virtual] void QAbstractSpinBox::stepBy(int steps)
每当用户触发一步时都会被调用的虚拟函数。steps 参数表示步数。例如,按下Qt::Key_Down 将触发对stepBy(-1) 的调用,而按下Qt::Key_PageUp 将触发对stepBy(10) 的调用。
若您继承了QAbstractSpinBox 类,则必须重写此函数。请注意,即使计算出的值超出最小值和最大值的范围,该函数仍会被调用。处理此类情况正是此函数的职责。
另请参阅 stepUp()、stepDown() 和keyPressEvent()。
[slot] void QAbstractSpinBox::stepDown()
向下移动一个行步。调用此插槽的效果与调用 `stepBy(-1)` 类似;
[virtual protected] QAbstractSpinBox::StepEnabled QAbstractSpinBox::stepEnabled() const
一个虚拟函数,用于确定在任意给定时刻,向上和向下步进是否合法。
除非 (stepEnabled() &StepUpEnabled) != 0,否则上箭头将被标记为禁用状态。
如果启用了循环功能,默认实现将返回 (StepUpEnabled|StepDownEnabled)。否则,如果值大于minimum(),则返回StepDownEnabled ;如果值小于maximum(),则返回StepUpEnabled 。
若您继承了QAbstractSpinBox 类,则需要重新实现此函数。
另请参阅 QSpinBox::minimum()、QSpinBox::maximum() 和wrapping()。
[slot] void QAbstractSpinBox::stepUp()
按行步长增加1。调用此插槽相当于调用stepBy(1);
[override virtual protected] void QAbstractSpinBox::timerEvent(QTimerEvent *event)
重写了:QObject::timerEvent(QTimerEvent *event)。
[virtual] QValidator::State QAbstractSpinBox::validate(QString &input, int &pos) const
该虚拟函数由QAbstractSpinBox 调用,用于判断input 是否有效。参数pos 表示字符串中的位置。在各个子类中被重新实现。
[override virtual protected] void QAbstractSpinBox::wheelEvent(QWheelEvent *event)
重写了:QWidget::wheelEvent(QWheelEvent *event)。
© 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.