Qt QSpinBox微调框控件

发布时间:2024年01月11日

微调框,允许用户按照一定的步长,来增加或减少其中显示的数值

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

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

其中 :

  • SpinBox-用于整数的显示和输入
  • DoubleSpinBox-用于浮点数的显示和输入

它们都是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 warpping() const;
void serWrapping(bool w);

1.4 加速

用于设置数值增加和减少的速度

如果设置为true,随着长按向上/向下箭头时间的增加,数值会加速增加/减少。

// 获取和设置是否允许加速
bool isAccelerated() const;
void serAccelerated(bool on);

1.5 前缀和后缀

用于设置微调框的前缀和后缀显示

比如,如果微调框中显示的是重量,可以添加一个KG的后缀,如果微调框中显示的是单价,可以添加一个的前缀

// 获取和设置前缀
QString prefix() const;
void serPrefix(const QString &prefix);

// 获取和设置后缀
QString suffix() const;
void setSuffix(const QString &suffix);

1.6 信号和槽

当微调框中的数值发生变化时,会发射valueChanged信号

void valueChanged(int i);

2 实例

该案例演示,当单价和重量变化时,实时显示计算出的总价

在这里插入图片描述

2.1 布局

在Ul设计师界面,拖拽对应的控件,修改显示的文字、控件的name,然后完成布局

在这里插入图片描述

2.2 代码实现

// 在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));
}

文章来源:https://blog.csdn.net/theRavensea/article/details/135537235
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。