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

本节对应的视频讲解:B_站_链_接

https://www.bilibili.com/video/BV1ZZ4y1a73e

微调框,允许用户按照一定的步长,来增加或减少其中显示的数值
【QT开发笔记-基础篇】| 第二章 常用控件 | 2.8 微调框 QSpinBox_第1张图片

修改微调框数值的方式包括:

  • 单击右侧的向上/向下按钮
  • 按键盘的向上/向下键
  • 在微调框获取焦点时,通过鼠标滚轮的上下滚动
  • 当然了,也允许用户手动输入

其中:

  • 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. 案例


该案例演示,当单价和重量变化时,实时显示计算出的总价
【QT开发笔记-基础篇】| 第二章 常用控件 | 2.8 微调框 QSpinBox_第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


你可能感兴趣的:(《QT开发笔记-基础篇》,qt,c++,linux,物联网,嵌入式硬件)