QSpinBox 旋转框/微调按钮

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函数测试:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值