1、 QAbstractSpinBox 类是 QWidget 类的直接子类,虽然该类不是抽象类,但该类并未提供实
 际的功能,仅为旋转框提供了一些外观的形式以及需要子类实现了成员, 也就是说点击微调按钮的上/下按钮,不会使其中的数值有变化。 实际的功能是由该类的子类提供的,用户也可继承该类实现自定义的功能。
 2、旋转框是由微调按钮(用于调整值) 和 行编辑器(用于显示值)组成的(见右图)
                                
 3、步长:是指当使用微调按钮的箭头增加/减少值时,该值将会增加/减少步长的数量,比如
 若当前值为 10,步长为 2,则使用向上箭头调整其值时,该值将增长为 12。
 3、 QAbstractSpinBox 类中的属性
| QAbstractSpinBox 类(属性速查表) | |||
| 属性名 | 说明 | 属性名 | 说明 | 
| accelerated | 是否加快调整速度 | keyboardTracking | 是否启用键盘跟踪 | 
| acceptableInput | 是否符合验证的要求 | readOnly | 是否为只读 | 
| alignment | 对齐方式 | showGroupSeparator | 是否显示千位分隔符 | 
| buttonSymbols | 微调按钮的形式 | specialValueText | 设置和返回特殊值文本 | 
| correctionMode | 中间值的更正模式 | text | 获取旋转框中的文本(包括前/后缀) | 
| frame | 是否绘制默认边框 | wrapping | 调整值时是否可以循环 | 
①、 accelerated: bool 访问函数: bool isAccelerated() const; void setAccelerated(bool);
 此属性用于描述当按下旋转框的“向上/向下”按钮一段时间不放时,是否会加快调整
 旋转框中数值增加/减少的速度。 默认为 false。
 ②、 acceptableInput: bool 访问函数: bool hasAcceptableInput() const;
 此属性用于获取输入的值是否满足当前验证器的要求。
 ③、 alignmen: Qt::Alignment
 访问函数: Qt::Alignment alignment() const; void setAlignment(Qt::Alignment);
 对齐方式,默认值为 Qt::AlignLeft。 Qt::Alignment 枚举见“部件公共枚举”章节。
 ④、 buttonSymbols: ButtonSymbols
 访问函数: ButtonSymbols buttonSymbols() const; void setButtonSymbols(ButtonSymbols);
 此属性用于设置当前旋转框右侧微调按钮的外观样式,默认值为 UpDownArrows。注
 意: 有可能会以相同的方式显示 PlusMinus 和 UpDownArrows。 其中 ButtonSymbols
 枚举见下表
| QAbstractSpinBox::ButtonSymbols 枚举(无标志) 用于描述旋转框右侧微调按钮的外观样式 | ||
| 成员 | 值 | 说明 | 
| QAbstractSpinBox::UnDownArrows | 0 | 箭头形式 | 
| QAbstractSpinBox::PlusMinus | 1 | +或-符号的形式 | 
| QAbstractSpinBox::NoButtons | 2 | 不显示按钮 | 
                                        
⑤、 correctionMode: CorrectionMode
 访问函数: CorrectionMode correctionMode() const; void setCorrectionMode(CorrectionMode);
 当编辑完成后,更正中间值的模式。默认为 QAbstractSpinBox::CorrectToPreviousValue。
 枚举 CorrectionMode 见下表
| QAbstractSpinBox::CorrectionMode 枚举(无标志) 用于描述当编辑完成后,更正中间值的模式 | ||
| 成员 | 值 | 说明 | 
| QAbstractSpinBox::CorrectToPreviousValue | 0 | 恢复到最后一个有效值 | 
| QAbstractSpinBox::CorrectToNearestValue | 1 | 恢复到最近的有效值 | 
⑥、 frame: bool 访问函数: bool hasFrame() const; void setFrame(bool);
 此属性描述是否绘制旋转框默认的边框
            
              
⑦、 keyboardTracking: bool
 访问函数: bool keyboardTracking() const; void setKeyboardTracking(bool);
  是否启用键盘跟踪(默认为启用)。
  若启用了键盘跟踪,则当用户从键盘输入新值时,每键入一个值旋转框就会发
 送一个 valueChanged()信号。比如当用户通过键盘 6, 0, 0 而输入值 600 时,旋
 转框发出 3 个信号,其值分别为 6, 60, 600。
  若禁用键盘跟踪,则旋转框不会在键入时立即发送 valueChanged()信号,而是在
 按下 enter 键、失去键盘焦点等时候发送该信号。
⑧、 readOnly: bool 访问函数: bool isReadOnly() const; void setReadOnly(bool);
 是否启用只读模式(默认为 false)。 只读模式不能更改值(但仍可选择和复制),也不会
 显示文字光标。
⑨、 showGroupSeparator: bool //qt5.3
 访问函数: bool isGroupSeparatorShow() const; void setGroupSeparatorShow(bool);
| 此属性描述,是否启用千位分隔符(默认为 false),即右图中数字下的逗号。 | 
注意: Qt 在输入数值后需要点击一下微调按钮才会显示出千位分隔符。
                                
 ⑩、 specialValueText: QString
 访问函数: QString specialValueText() const; void setSpecialValueText(const QString&);
  此属性描述旋转框的特殊值文本(默认为没有特殊值文本)。
  特殊值文本是指, 当值等于最小值时旋转框显示这个特殊值文本而不显示数值。
  特殊值文本会被 QSpinBox::valueChanged()信号传递。
 使用空字符串设置特殊值文本,可关闭特殊值文本的显示。
  若未设置特殊值文本,则该属性为空字符串
⑪、 text: const QString 访问函数: QString text() const;
 获取旋转框中的文本,包括前缀和后缀。
⑫、 wrapping: bool 访问函数: bool wrapping() const; void setWrapping(bool);
 此属性描述旋转框在调整值时是否可以循环(默认为 false),若该属性为 true,则当使
 用微调按钮将值增加到最大值时,会循环至最小值,返之亦然。只有在设置了最大值
 和最小值时才有意义。
4、 QAbstractSpinBox 类中的函数
 ①、 QAbstractSpinBox(QWidget* parent = Q_NULLPTR); //构造函数
 ②、 void selectAll(); //槽, 选中除了前缀和后缀以外的所有文本
 ③、 virtual void clear() //槽,虚拟的, 清除行编辑器中的所有文本,但前缀和后缀除外。
 ④、 virtual void stepBy(int steps); //虚拟的
 当激活微调按钮的向上/向下箭头时会调用此虚函数,该函数会把当前值增加/减少
 steps, 其实 steps 就是步长。 比如当前值为 10,则调用 stepBy(3);之后的值为 13。子
 类化 QAbstractSpinBox 必须实现此函数,注意:即使结果值超出了最小值和最大值
 的范围,此函数仍会被调用。
 ⑤、 void stepDown() ; //槽
降低一个步长,类似于调用 stepBy(-1);准确的说是 stepBy(steps);因为 steps 的值不一
 定是-1,比如,对于 QSpinBox 若把 singleStep 属性设置为 2,则调用该函数将使用
 减少 2。
 ⑥、 void stepUp(); //槽
提高一个步长,类似于调用 stepBy(1);准确的说是 stepBy(steps);见 stepDown()。
 ⑦、 virtual QValidator::State validate(QString &input, int &pos) const; //虚拟的
 此虚函数用于验证 input 是否有效。该虚函数在各子类中被重新实现。
 ⑧、 virtual void fixup(QString &input) const; //虚拟的
 若按下 return 或调用 interpretText()时,对 input 的验证不为 QValidator::Acceptable(可
 接受)时,则调用此虚函数,该函数会尝试更正文本以使其有效,该函数在各子类中
 被重新实现。
 ⑨、 virtual StepEnabled stepEnabled() const; //受保护的
 此函数决定了微调按钮向上/向下是否合法。若子类化 QAbstractSpinBox,需要实现
 此函数。 StepEnabled 标志见下表
| QAbstractSpinBox::StepEnabledFlag 枚举 标志为: QAbstractSpinBox::StepEnabled | |
| 成员 | 值 | 
| QAbstractSpinBox::StepNone | 0x00 | 
| QAbstractSpinBox::StepUnEnabled | 0x01 | 
| QAbstractSpinBox::StepDownEnabled | 0x02 | 
| ⑩、 QLineEdit* lineEdit() const; | //受保护的 | 
| void setLineEdit(QLineEdit* lineEdit); | //受保护的 | 
以上函数用于获取和设置旋转框的行编辑器。其中,参数 lineEdit 不能为 0。若设置
 的新的行编辑器 lineEdit 的 QLineEdit::validator()函数返回 0(即未安装验证器),则将
 在新的行编辑器中使用旋转框内部的验证器。
⑪、 virtual void keyPressEvent(QKeyEvent* event); //受保护的
 这是对 QWidget::keyPressEvent()的重新实现,该函数重新实现了以下功能
| 按键 | 说明 | 
| 向上箭头 | 这会调用 stepBy(1),表示调整值增加 1 | 
| 向下箭头 | 这会调用 stepBy(-1),表示调整值减少 1 | 
| Page up | 这会调用 stepBy(10),表示调整值增加 10 | 
| Page down | 这会调用 stepBy(-10),表示调整值减少 10 | 
⑫、 void editingFinished() ; //信号
 当编辑完成时发送该信号,即当旋转框失去焦点或按下 enter 键时,会发送该信号。



















