微调框,允许用户按照一定的步长,来增加或减少其中显示的数值
修改微调框数值的方式包括:
- 单击右侧的向上/向下按钮
- 按键盘的向上/向下键
- 微调框获取焦点时,通过鼠标滚轮的上下滚动
- 当然了,也允许用户手动输入
其中 :
SpinBox
-用于整数的显示和输入DoubleSpinBox
-用于浮点数的显示和输入它们都是
QAbstractSpinBox
的子类,具有大多数相同的属性,只是参数类型不同(一个int,一个double)
QSpinBox
有很多属性,完整的可查看帮助文档。这里以QSpinBox
为例,列出常用的属性和方法:
微调框和值相关的属性包括:当前值、最大值、最小值
// 获取和设置当前值
int value() const;
void setValue(int val);
// 获取和设置最大值
int maximum() const;
void setMaximum(int max);
// 获取和设置最小值
int minimum() const;
void setMinimum(int min);
// 一次设置最大值和最小值
void setRange(int minimum, int maximum);
步长是指按右侧上下调整按钮时的单步改变值,也就是按一次,增加或减少的值
// 获取和设置步长
int singleStep() const;
void setSingleStep(int val);
wrapping
属性用于设置是否允许循环
比如范围设置为0-99
// 获取和设置是否允许循环
bool warpping() const;
void serWrapping(bool w);
用于设置数值增加和减少的速度
如果设置为true
,随着长按向上/向下箭头时间的增加,数值会加速增加/减少。
// 获取和设置是否允许加速
bool isAccelerated() const;
void serAccelerated(bool on);
用于设置微调框的前缀和后缀显示
比如,如果微调框中显示的是重量,可以添加一个KG
的后缀,如果微调框中显示的是单价,可以添加一个¥
的前缀
// 获取和设置前缀
QString prefix() const;
void serPrefix(const QString &prefix);
// 获取和设置后缀
QString suffix() const;
void setSuffix(const QString &suffix);
当微调框中的数值发生变化时,会发射valueChanged
信号
void valueChanged(int i);
该案例演示,当单价和重量变化时,实时显示计算出的总价
在Ul设计师界面,拖拽对应的控件,修改显示的文字、控件的name,然后完成布局
// 在Widget中
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
ui->setupUi(this);
// 1. 设置单价
ui->dsbPrice->setMaximum(99.99);
ui->dsbPrice->setMinimum(1.00);
// ui->dsbPrice->setRange(1.00, 99.99);
// 设置前缀
ui->dsbPrice->setPrefix("¥");
// 设置步长
ui->dsbPrice->setSingleStep(0.50);
// 设置加速
ui->dsbPrice->setAccelerated(true);
// 设置到了最后再增加就回到初始值
ui->dsbPrice->setWrapping(true);
// 1. 设置重量
ui->sbWeight->setMaximum(200);
ui->sbWeight->setMinimum(100);
// 设置前缀
ui->sbWeight->setSuffix(" KG");
// 设置步长
ui->sbWeight->setSingleStep(1);
// 设置加速
ui->sbWeight->setAccelerated(true);
// 设置到了最后再增加就回到初始值
ui->sbWeight->setWrapping(true);
}
Widget::~Widget() {
delete ui;
}
void Widget::on_dsbPrice_valueChanged(double arg1) {
double price = arg1;
int weight = ui->sbWeight->value();
ui->leTotal->setText(QString::number(price * weight));
}
void Widget::on_sbWeight_valueChanged(int arg1) {
int weight = arg1;
double price = ui->dsbPrice->value();
ui->leTotal->setText(QString::number(weight * price));
}