本节对应的视频讲解:B_站_链_接
https://www.bilibili.com/video/BV1ZZ4y1a73e
微调框,允许用户按照一定的步长,来增加或减少其中显示的数值
修改微调框数值的方式包括:
- 单击右侧的向上/向下按钮
- 按键盘的向上/向下键
- 在微调框获取焦点时,通过鼠标滚轮的上下滚动
- 当然了,也允许用户手动输入
其中:
QSpinBox
- 用于整数的显示和输入QDoubleSpinBox
- 用于浮点数的显示和输入
它们都是 QAbstractSpinBox
的子类,具有大多数相同的属性,只是参数类型不同(一个 int
,一个double
)
1. 属性和方法
QSpinBox
有很多属性,完整的可查看帮助文档。这里以 QSpinBox
为例,列出常用的属性和方法:
1.1 值
微调框和值相关的属性包括:当前值、最大值、最小值
// 获取和设置当前值
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)
1.2 步长
步长是指按右侧上下调整按钮时的单步改变值,也就是按一次,增加或减少的值
// 获取和设置步长
int singleStep() const
void setSingleStep(int val)
1.3 循环
wrapping
属性用于设置是否允许循环
比如范围设置为 0-99
- 当数值达到
99
时,再点击向上的按钮,此时数值会变为0
- 当数值达到
0
时,再点击向下的按钮,此时数值会变为99
// 获取和设置是否允许循环
bool wrapping() const
void setWrapping(bool w)
1.4 加速
用于设置数值增加和减少的速度
如果设置为 true
,随着长按向上/向下箭头时间的增加,数值会加速增加/减少。
// 获取和设置是否允许加速
bool isAccelerated() const
void setAccelerated(bool on)
1.5 前缀、后缀
用于设置微调框的前缀和后缀显示
比如,如果微调框中显示的是重量,可以添加一个 KG
的后缀,如果微调框中显示的是单价,可以添加一个 ¥
的前缀
// 获取和设置前缀
QString prefix() const
void setPrefix(const QString &prefix)
// 获取和设置后缀
QString suffix() const
void setSuffix(const QString &suffix)
1.6 信号槽
当微调框中的数值发生变化时,会发射 valueChanged
信号
void valueChanged(int i)
2. 案例
该案例演示,当单价和重量变化时,实时显示计算出的总价
2.1 布局
在 UI
设计师界面,拖拽对应的控件,修改显示的文字、控件的 name
,然后完成布局
2.2 代码实现
完整的项目,在本节视频的置顶评论下载即可
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.5);
// 设置加速
ui->dsbPrice->setAccelerated(true);
// 设置循环
ui->dsbPrice->setWrapping(true);
// 2、设置重量
// 设置最大值和最小值
ui->sbWeight->setMaximum(200);
ui->sbWeight->setMinimum(100);
// ui->sbWeight->setRange(100, 200);
// 设置前缀
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;
// double price = ui->dsbPrice->value();
int weight = ui->sbWeight->value();
ui->leTotal->setText(QString::number(price * weight));
}
void Widget::on_sbWeight_valueChanged(int arg1)
{
double price = ui->dsbPrice->value();
int weight = arg1;
// int weight = ui->sbWeight->value();
ui->leTotal->setText(QString::number(price * weight));
}
本节对应的视频讲解:B_站_链_接
https://www.bilibili.com/video/BV1ZZ4y1a73e
本文含有隐藏内容,请 开通VIP 后查看