功能描述
QSpinBox旨在处理整数和离散值集(例如月份名称);使用QDoubleSpinBox作为浮点值。
QSpinBox允许用户通过单击上/下按钮或按键盘上的上/下按钮来选择一个值,以增加/减少当前显示的值。
用户也可以手动输入值。旋转框支持整数值,但可以扩展为使用带有validate(),textFromValue()和valueFromText()的不同字符串。
每次值更改时,QSpinBox都会发出两个valueChanged()信号,一个信号提供整数,另一个信号提供QString。 QString带有数值及其前后缀。可以使用value()获取当前值,并使用setValue()进行设置。
单击向上/向下按钮或使用键盘上的向上和向下箭头,将以singleStep()大小为步长来增大或减小当前值。如果要更改此行为,可以重新实现虚函数stepBy()。
大多数旋转框是定向的,但是QSpinBox也可以用作圆形旋转框,即,如果范围为0-99,并且当前值为99,则单击“向上”将给出0。如果需要循环行为,请使用setWrapping(true)。
可以在显示的值之前或之后附加任意字符串,这些字符串指示例如货币或度量单位。请参见setPrefix()和setSuffix()。旋转框中的文本使用text()(包括任何prefix()和suffix())
或cleanText()(没有prefix(),suffix()且没有前导或尾随空格)
检索。
除了数值范围外,通常还希望为用户提供特殊的选择(通常是默认设置)。有关如何使用QSpinBox执行此操作,请参见setSpecialValueText()。
由于QDoubleSpinBox用法和QSpinBox差不多,所以我们主要介绍QSpinBox,后面给一个QDoubleSpinBox的小例子。
基本用法
下面用一个小例子来展示QSpinBox的基本用法
效果

源码
QSpinBox *spinBox = new QSpinBox(this);
spinBox->setRange(5, 40); // 变化范围
spinBox->setSingleStep(1); // 步长
spinBox->setValue(5); // 起始默认值
spinBox->setSpecialValueText(tr("minimum")); // 特殊文本值,数值为最小时显示
spinBox->setPrefix("height: "); // 前缀
spinBox->setSuffix(" m"); // 后缀
spinBox->setWrapping(true); // 开启循环
QGridLayout *gridLayout = new QGridLayout;
gridLayout->addWidget(spinBox);
this->setLayout(gridLayout);
常用接口
属性
名称 | 描述 |
---|---|
cleanText : const QString | 数值字符串(不带前后缀以及前后空白) |
singleStep : int | 步长 |
displayIntegerBase : int | 此属性保存用于显示旋转框值的基础 |
stepType : StepType | 步长类型(不变补偿和自适应变化步长) |
maximum : int | 可输入最大值 |
suffix : QString | 前缀字符串 |
minimum : int | 可输入最小值 |
value : int | 当前值 |
prefix : QString | 后缀字符串 |
公共函数
- 设置输入范围
- setRange(int minimum, int maximum)
- 设置步长
- setSingleStep(int val)
- 设置步长类型
- setStepType(QAbstractSpinBox::StepType stepType)
- 设置前后缀
- setPrefix(const QString &prefix)
- setSuffix(const QString &suffix)
- 当前数值字符串
- QString cleanText() const
- 最大最小值
- int maximum()
- int minimum()
- 当前值
- int value ()
- 值到字符串的转换
- virtual QString textFromValue(double value) const
用来根据当前值(类内部值)显示特定的字符串(用户看到的值),用于自定义QSpinBox
- 字符串到值的转换
- virtual double valueFromText(const QString &text) const
用来根据用户输入的字符串来设定类的当前值,用于自定义QSpinBox。
槽函数
名称 | 描述 |
---|---|
void setValue(int val) | 设置当前值 |
信号函数
名称 | 描述 |
---|---|
valueChanged(int i) | 带整型值的信号 |
valueChanged(const QString &text) | 带字符串的信号(带有前后缀) |
QDoubeSpinBox
QDoubleSpinBox可以用来输入浮点数。
效果

源码
QDoubleSpinBox *doubleSpinBox = new QDoubleSpinBox(this);
spinBox->setRange(5, 40); // 范围
spinBox->setSingleStep(1); // 步长
spinBox->setValue(5); // 当前值
spinBox->setSpecialValueText(tr("minimum")); // 特殊文本值,数值为最小时显示
spinBox->setPrefix("height: "); // 前缀
spinBox->setSuffix(" m"); // 后缀
spinBox->setWrapping(true); // 开启循环
QGridLayout *gridLayout = new QGridLayout;
gridLayout->addWidget(spinBox);
this->setLayout(gridLayout);
自定义QSpinBox
通过重写textFromValue和valueFromText来实现自定义QSpinBox
效果如下

源码
#ifndef MYSPINBOX_H
#define MYSPINBOX_H
#include <QSpinBox>
class MySpinBox : public QSpinBox
{
public:
explicit MySpinBox(QWidget *parent = nullptr);
protected:
// 将输入的文本解读为适当的值
virtual int valueFromText(const QString &text) const Q_DECL_OVERRIDE
{
QRegExp regExp(tr("(\\d+)(\\s*[xx]\\s*\\d+)?"));
if (regExp.exactMatch(text)) {
return regExp.cap(1).toInt();
} else {
return 0;
}
}
// 根据输入的值返回文本
virtual QString textFromValue(int value) const Q_DECL_OVERRIDE
{
return tr("%1 x %1").arg(value);
}
};
#endif // MYSPINBOX_H
引用
[1] Qt助手
[2] https://blog.csdn.net/liang19890820/article/details/52293073