1、 QSpinBox 类是 QAbstractSpinBox 类的直接子类和具体实现,
2、 QSpinBox 类被设计用于处理整数和离散值集合,对于浮点值使用 QDoubleSpinBox 类实
现(QDoubleSpinBox 类的函数与 QSpinBox 类是相同的。构造 QDoubleSpinBox 旋转框,其值为 0.0~99.99,步长为 1.0,小数位数为 2 位, 初始值为 0.00)。
3、 QSpinBox 默认只支持整数值,但可通过其内部的成员函数进行扩展,以支持使用不同的
字符串。
3、 QSpinBox 类中的属性
QSpinBox 类(属性速查表) | |||
属性名 | 说明 | 属性名 | 说明 |
cleanText | 获取文本(不包括前/后缀) | prefix | 设置和获取前缀 |
displayIntegerBase | 设置和获取数值的基数 | suffix | 设置和获取后缀 |
maximum | 设置和获取最大值 | signleStep | 设置和获取步长 |
minimum | 设置和获取最小值 | value | 设置和获取值 |
①、 cleanText: const QString 访问函数:
QString cleanText() const;获取旋转框中的文本,不包括前缀、后缀及前后的空格。
使用 QAbstractSpinBox::text属性可以获取包括前/后缀的文本。
②、 displayIntegerBase: int //qt5.2
访问函数: int displayIntegerBase() const; void setDisplayIntegerBase(int);
设置和获取旋转框中的值的基数(支持 2~36 进制),默认为 10(即 10 进制)
③、 maximum: int 访问函数: int maximum() const; void setMaximum(int);
④、 minimum: int 访问函数: int minimum() const; void setMinimum(int);
以上两属性用于设置和获取旋转框中的最大值(默认为 99)和最小值(默认为 0)
⑤、 prefix: QString 访问函数: QString prefix() const; void setPrefix(const QString &);
⑥、 suffix: QString 访问函数: QString suffix() const; void setSuffix(const QString &);
以上属性用于设置和获取旋转框的前缀(默认无前缀)和后缀(默认无后缀),见右图
前/后缀位于显示的值的前/后面,常见用途是显示度量单位或货币的符号。
设置空字符串可以关闭前/后缀,
若未设置前/后缀则该属性是一个空字符串,
若设置了 specialValueText 属性(特殊值文本),当显示的值为最小值时,不显示前
/后缀,而显示特殊值文本。
⑦、 signleStep: int 访问函数: int signleStep() const; void setSignleStep(int);
设置和获取旋转框的步长值, 默认为 1,若该值设置为负数,则该函数不起作用。 可
以重载虚函数stepBy()实现自已的策略。这里需说明QSpinBox实现的stepBy(int steps)
虚函数的步长是 steps*signleStep,比如,若 signleStep 属性设置为 3,则调用 stepBy(4);
将使值增加 12,可以这样理解, signleStep 才是步长,而 stepBy(4)表示将值增长 4 个
步长的大小,同理 signleStep 属性还会影响到 stepUp()和 stepDown()函数,详见
QAbstractSpinBox::StepUp()函数的讲解。
⑧、 value: int
访问函数: int value() const; void setValue(int);
信号: valueChanged(int); void valueChanged(const QString &);
获取和设置旋转框的值,若新值与旧值不同,将发送 valueChanged 信号,该信号的
QString 类型的形参,保存的值包括前缀和后缀。
4、 QSpinBox 类中的函数
①、 QSpinBox(QWidget* parent = Q_NULLPTR); //构造函数
构造一个旋转框,其值的范围是 0~99,步长为 1,初值为 0。
②、 void setRange( int min, int max);
设置最大值和最小值,这是属性 maximum 和 minimum 的便捷设置函数。
③、 virtual QString textFromValue( int value) const; //虚拟的,受保护的
当需要显示给定的值 value 时,旋转框就会调用该虚函数,默认实现是返回一个字符
串,且不会为 specialValueText 属性(特殊文本值)调用此函数,且返回值中没有前/后
缀。若重新实现此函数,通常还需要重新实现 valueFromeText()和 validate()函数。
④、 virtual int valueFromText( const QString &text) const; //虚拟的,受保护的
当需要将输入的文本 text 解释为值时,旋转框就会调用此虚函数,若以非数字形式显
式旋转框中的值时,就需要重新实现此函数。 注意: specialValueText 属性(特殊文本
值)不在此函数内处理。
⑤、 void valueChanged(int i); //信号
void valueChanged(const QString &text); //信号
只要旋转框的值发生变化就会发送以上信号,新值在 i 中传递。其中 text 是包含前/后缀的新值。
//m.h 文件的内容
#ifndef M_H
#define M_H
#include <QtWidgets>
#include <iostream>
using namespace std;
class B :public QSpinBox {
Q_OBJECT
public: B(QWidget *p = 0) :QSpinBox(p) {}
int j; //用于保存自定义的步长
public slots:
void setlong(int i) { j = i; } //使用该函数设置自定义的步长,可以为负值。
//当激活微调按钮的上/下箭头时会自动调用该函数。Qt 会自动获取 s 的值,当点击旋转框的上箭头时 s=1,点击下箭头时s=-1。若按下的是 Page up 键,则 s=10,同理 Page down 时 s=-10。
void stepBy(int s) {
QSpinBox::stepBy(s*j); //设置自定义的步长。
}
//当需要显示给定的值 value 时,会调用该函数
QString textFromValue(int value) const {
QVariant v = value; //Qt 会自动获取旋转框中输入的值。使用 QVariant 类,可方便的在各种类型之间进行转换
QString s = "YY" + v.toString() + "XX"; //连接 YY 与 v 转换之后的字符串
//cout<<s.toStdString()<<endl; //用于测试。
return s; //字符串 s 会在旋转框中显示。
}
void f(QString t) { cout << t.toStdString() << endl; }//t 含有旋转框内的文本(包括前/后缀)
};
#endif // M_H
//m.cpp 文件的内容
#include "Header.h"
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QWidget w;
B *ps1 = new B(&w); ps1->resize(77, 22); ps1->move(22, 55);
ps1->setRange(0, 1000000); //设置旋转框中的值的范围
//描述当按下旋转框的“向上/向下”按钮一段时间不放时,是否会加快调整旋转框中数值 增加/减少 的速度。 默认为 false。
ps1->setAccelerated(1); //开启加速调整。
ps1->setValue(11); //设置初始值为 11。
//特殊值文本是指, 当值等于最小值时旋转框显示这个特殊值文本而不显示数值
ps1->setSpecialValueText("XXX"); //设置特殊文本值(即最小值时显示的文本)
ps1->setWrapping(1); //开启调整值循环,即继续增长最大值时,循环至最小值。
ps1->setPrefix("$"); //设置前缀
ps1->setSuffix("%"); //设置后缀
//ps1->setKeyboardTracking(false); //禁用键盘跟踪,默认为 true,该设置主要影响
//valueChanged 信号的发送时机,读者可自行验证。
/* ps1->setDisplayIntegerBase(16); 设置为 16 进制。设置该函数后,旋转框对值的显示会出问题,
因为重新实现的 textFromValue()函数,未对进制的显示进行处
理。 */
ps1->setlong(-2); /*使用自定义的函数设置负值步长,设置后点击上箭头会使值减少,下箭头使值
增长。 */
cout << ps1->cleanText().toStdString() << endl; //输出旋转框内的文本,不含前/后缀
cout << ps1->text().toStdString() << endl;//输出旋转框内的文本,含前/后缀
QObject::connect(ps1, SIGNAL(valueChanged(const QString)), ps1, SLOT(f(QString)));
w.resize(300, 200); w.show(); return a.exec();
}
setSpecialValueText函数测试: