Qt QSpinBox 总结

Qt5 QSpinBox 总结

1. 基本特性

  • 用途:用于输入和调整整数值,支持通过上下箭头、键盘输入或编程方式修改值。

  • 默认范围:0 到 99,可通过 setRange(min, max) 自定义。

  • 步长控制:setSingleStep(step) 设置单步增减值(默认为1)。

  • 前缀/后缀:支持通过 setPrefix() 和 setSuffix() 添加文本(如 $ 或 px),仅用于显示,不影响实际值。

  • 进制显示:支持十进制(默认)、十六进制(setDisplayIntegerBase(16))、二进制等。

2. 核心方法

方法 说明
value() / setValue(int) 获取或设置当前值。
minimum() / maximum() 获取最小/最大值。
setRange(int min, int max) 同时设置最小值和最大值。
setSingleStep(int step) 设置单步增减步长。
setPrefix(const QString&) 设置数值前显示的前缀(如 $)。
setSuffix(const QString&) 设置数值后显示的后缀(如 px)。
setWrapping(bool enable) 启用/禁用循环(达到极值后绕回)。
setAccelerated(bool enable) 启用加速(长按箭头时快速增减值)。

3. 关键信号


信号 说明
valueChanged(int) 值变化时触发,传递新整数值。
textChanged(const QString&) 文本(含前缀/后缀)变化时触发。

4. 样式定制

  • QSS 示例:
c++ 复制代码
QSpinBox {
    border: 2px solid #3498db;
    border-radius: 5px;
    padding: 5px;
}
QSpinBox::up-button { /* 上箭头样式 */ }
QSpinBox::down-button { /* 下箭头样式 */ }

5. 子类化与自定义

  • 输入验证:覆盖 validate() 和 valueFromText() 实现自定义格式(如带单位的输入)。

  • 事件处理:重写 keyPressEvent() 或 wheelEvent() 修改默认交互逻辑。

6. 注意事项

  • 输入过滤:自动过滤非数字字符,用户无需手动处理。

  • 键盘交互:

    上下箭头键:按步长调整值。

    PageUp/PageDown:按步长×10调整值。

  • 值与显示分离:value() 始终返回整数,前缀/后缀仅用于显示。

  • 信号选择:优先用 valueChanged(int) 避免处理文本解析。

7. 典型应用场景

  • 数值输入(如年龄、数量、尺寸)。

  • 与 QSlider 联动,实现双向数据绑定。

  • 参数配置界面(如字体大小、颜色通道值)。

8. 示例代码

c++ 复制代码
// 创建 QSpinBox 并设置属性
QSpinBox *spinBox = new QSpinBox;
spinBox->setRange(0, 100);          // 范围 0~100
spinBox->setSingleStep(5);          // 步长5
spinBox->setPrefix("$ ");           // 显示 "$ 数值"
spinBox->setValue(50);              // 初始值

// 连接信号
connect(spinBox, QOverload<int>::of(&QSpinBox::valueChanged), 
        [](int val) { qDebug() << "Value:" << val; });
相关推荐
福大大架构师每日一题15 小时前
go 1.25.1发布:重点修复net/http跨域保护安全漏洞(CVE-2025-47910)
开发语言·http·golang
Ophelia(秃头版15 小时前
经典设计模式:单例模式、工厂模式
java·开发语言·单例模式
Dear.爬虫16 小时前
Golang中逃逸现象, 变量“何时栈?何时堆?”
开发语言·后端·golang
编码浪子17 小时前
趣味学RUST基础篇(构建一个命令行程序2重构)
开发语言·重构·rust
echoarts17 小时前
MATLAB R2025a安装配置及使用教程(超详细保姆级教程)
开发语言·其他·matlab
阿方.91817 小时前
《数据结构全解析:栈(数组实现)》
java·开发语言·数据结构
Dovis(誓平步青云)18 小时前
《探索C++11:现代语法的内存管理优化“性能指针”(下篇)》
开发语言·jvm·c++
charlie11451419118 小时前
前端三件套简单学习:HTML篇1
开发语言·前端·学习·html
kebeiovo18 小时前
项目必备流程图,类图,E-R图实例速通
开发语言·r语言·流程图
软件开发-NETKF888818 小时前
JSP到Tomcat特详细教程
java·开发语言·tomcat·jsp·项目运行