【QT开发笔记-基础篇】| 第二章 常用控件 | 2.8 微调框 QSpinBox

本节对应的视频讲解: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


  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大轮明王讲QT

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值