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 键时,会发送该信号。