实用指南:【Qt开发】输入类控件(四)-> QSpinBox

目录

1 -> 概述

2 -> QSpinBox 关键属性

3 -> 核心信号

4 -> 关键特性与功能

5 -> 代码示例

5.1 -> 调整麦当当购物车中的份数

6 -> 总结


1 -> 概述

在图形用户界面设计中,当需要用户输入一个整数值时,提供一个既直观又能防止错误输入的控件至关重要。Qt 框架中的 QSpinBox(数字旋转框)正是为此而生的强大工具。它不仅仅是一个简单的输入框,更是一个集成了输入验证、步进调整和灵活显示于一体的智能组件。

QSpinBox 是一个允许用户通过键盘输入或点击上下箭头按钮来选择一个整数值的控件。您可以将其想象为一个带有微调功能的数字输入框。它的核心价值在于约束便利:它将用户的输入严格限制在一个预定义的、合理的范围内,同时提供了极其便捷的方式来微调数值。

2 -> QSpinBox 关键属性

属性说明
value存储的数值
singleStep每次调整的 “步长”,按下一次按钮数值变化多少
displayInteger数字的进制。例如 displayInteger 设为 10,则是按照 10 进制表示。设为 2 则为 2 进制表示
minimum最小值
maximum最大值
suffix后缀
prefix前缀
wrapping是否允许换行
frame是否带边框
alignment文字对齐方式
readOnly是否允许修改
buttonSymbol

按钮上的图标

  • UpDownArrows 上下箭头形式
  • PlusMinus 加减号形式
  • NoButtons 没有按钮
accelerated(加速的)按下按钮时是否为快速调整模式
correctionMode

输入有误时如何修改

  • QAbstractSpinBox::CorrectToPreviousValue : 如果⽤⼾输⼊了⼀个⽆效的值(例如,在只能显⽰正整数的SpinBox中输⼊了负数),那么SpinBox会恢复为上⼀个有效值。例如,如果SpinBox的初始值是1,⽤⼾输⼊了-1(⽆效),然后SpinBox会恢复为1。
  • QAbstractSpinBox::CorrectToNearestValue : 如果⽤⼾输⼊了⼀个⽆效的值,SpinBox会恢复为最接近的有效值。例如,如果SpinBox的初始值是1,⽤⼾输⼊了-1(⽆效),那么SpinBox会恢复为0。
keyboardTrack

是否开启键盘跟踪

设为 true,每次在输入框输入一个数字,都会触发一次 valueChanged() 和 textChanged() 信号

设为 false,只有在最终按下 enter 或者输入框失去焦点,才会触发 valueChanged() 和 textChanged() 信号

3 -> 核心信号

信号说明
textChanged(QString)

微调框的文本发生改变时会触发

参数 QString 带有 前缀 和 后缀

valueChanged(int)

微调框的文本发生改变时会触发

参数 int,表示当前的数值

4 -> 关键特性与功能

  1. 可配置的数值范围
    开发者可以为 QSpinBox 设置一个最小值和最大值。这个简单的功能是防止无效输入的第一道防线。例如,在设置年龄时,可以将其范围设为 0 到 150;在设置月份时,范围则是 1 到 12。用户无法通过任何操作(键盘或按钮)输入或调整到超出此范围的数值。

  2. 灵活的步长调整
    当用户点击控件上的向上或向下箭头时,数值会以一个固定的“步长”递增或递减。这个步长通常是 1,但可以根据场景需要进行自定义。例如,在一个调整图片亮度(0-255)的控件中,步长设为 1 是合适的;而在一个以 10 为单位进行批量选择的场景中,则可以将步长设为 10,以提升操作效率。

  3. 前缀与后缀
    这是 QSpinBox 一个非常实用的特性,它极大地增强了控件的表意能力。开发者可以为显示的数字添加前缀或后缀文本。

    • 前缀:可以在数字前加上文字,例如,在一个金额输入框前加上“¥”或“$”符号。

    • 后缀:可以在数字后加上单位,例如,在温度设置后加上“°C”,在距离设置后加上“公里”。
      这个功能使得控件能够自我说明,让用户一目了然地知道当前数值所代表的含义,提升了界面的友好度。

  4. 特殊值处理
    当 QSpinBox 的数值处于其范围的最小值或最大值时,可以为其设置特殊的文本显示。例如,当数值为最小值 0 时,可以将其显示为“最小值”或“关闭”,而不是一个冰冷的数字“0”。这使得控件状态对用户更加友好和直观。

  5. 强大的信号与槽机制
    作为 Qt 的核心组成部分,QSpinBox 完美地融入了信号与槽系统。当控件的数值发生变化时(无论是通过键盘输入还是按钮点击),它会发射出数值已改变的信号。应用程序的其他部分可以轻松地连接这个信号,从而在数值变化时立即做出响应,更新其他UI元素或执行相应的业务逻辑,实现高效的界面联动。

5 -> 代码示例

5.1 -> 调整麦当当购物车中的份数

1. 在界面上创建下列内容

2. 编写代码,修改 widget.cpp,给下拉框设置初始值 

#include "widget.h"
#include "ui_widget.h"
#include 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->comboBox->addItem("深海鳕鱼堡");
    ui->comboBox->addItem("巨无霸");
    ui->comboBox->addItem("麦辣鸡腿堡");
    ui->comboBox_2->addItem("麦乐鸡块");
    ui->comboBox_2->addItem("玉米杯");
    ui->comboBox_2->addItem("中薯条");
    ui->comboBox_3->addItem("中可乐");
    ui->comboBox_3->addItem("中雪碧");
    ui->comboBox_3->addItem("柠柠海盐气泡水");
    ui->spinBox->setRange(1, 5);
    ui->spinBox_2->setRange(1, 5);
    ui->spinBox_3->setRange(1, 5);
    ui->spinBox->setValue(1);
    ui->spinBox_2->setValue(1);
    ui->spinBox_3->setValue(1);
}
Widget::~Widget()
{
    delete ui;
}

3. 编写代码,给按钮添加 slot 函数

void Widget::on_pushButton_clicked()
{
    qDebug() << ui->comboBox->currentText() << ": " << ui->spinBox->value()
             << ui->comboBox_2->currentText() << ": " << ui->spinBox_2->value()
             << ui->comboBox_3->currentText() << ": " << ui->spinBox_3->value();
}

4. 运行程序,可以看到,当用户选择不同的内容时,点击按钮就能获取到对应的结果,同时我们也无法输入一些超出范围的非法值

6 -> 总结

总而言之,QSpinBox 是 Qt 控件库中一个看似简单却功能全面的组件。它将一个普通的数字输入任务,转变为一个安全、高效且用户友好的交互过程。无论是在简单的配置对话框,还是在复杂的数据分析软件中,QSpinBox 都是处理离散整数输入的可靠且优雅的选择。理解并善用其丰富的特性,能够显著提升应用程序的稳健性和用户体验。


感谢各位大佬支持!!!

互三啦!!!

posted @ 2025-10-19 16:07  yjbjingcha  阅读(4)  评论(0)    收藏  举报