Windows图形界面(GUI)-QT-C/C++ - Qt QSpinBox
- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
一、控件概述
1.1 核心特性
1.2 常用场景
二、核心属性详解
2.1 基本属性配置
2.2 进阶属性说明
三、信号机制与事件处理
3.1 核心信号
3.2 信号对比
四、样式定制与功能扩展
4.1 样式表定制
4.2 功能扩展方法
五、典型应用案例
5.1 时间选择组件
5.2 进制转换器
一、控件概述
QSpinBox 是 Qt 框架中用于整数输入的重要控件,它提供了便捷的数字调整方式和精确的输入控制,特别适用于需要数值范围限制的场景。
1.1 核心特性
- 支持整数输入和步进调整
- 提供最小/最大值限制
- 可设置递增/递减步长
- 支持数值显示格式定制
- 支持键盘和鼠标操作
1.2 常用场景
- 参数配置界面(如音量调节)
- 数据范围选择(如年龄输入)
- 步进式调整(如温度控制)
- 选项循环选择(如星期设置)
- 数值输入严格限制的场景
二、核心属性详解
2.1 基本属性配置
// 初始化配置示例
ui->spinBox->setMinimum(0); // 最小值
ui->spinBox->setMaximum(100); // 最大值
ui->spinBox->setSingleStep(5); // 步进值
ui->spinBox->setPrefix("Value: "); // 前缀
ui->spinBox->setSuffix(" dB"); // 后缀
ui->spinBox->setWrapping(true); // 循环模式
2.2 进阶属性说明
属性名 | 类型 | 说明 | 默认值 |
---|---|---|---|
keyboardTracking | bool | 是否实时响应键盘输入 | true |
readOnly | bool | 是否为只读模式 | false |
specialValueText | QString | 最小值时的特殊文本显示 | "" |
displayIntegerBase | int | 数值显示基数(如二进制、十六进制) | 10 |
三、信号机制与事件处理
3.1 核心信号
// 标准信号连接示例
connect(ui->spinBox, QOverload<int>::of(&QSpinBox::valueChanged),
[=](int value){
qDebug() << "New value:" << value;
});
3.2 信号对比
valueChanged(int)
:仅传递数值valueChanged(QString)
:包含格式化文本editingFinished()
:结束编辑时触发
四、样式定制与功能扩展
4.1 样式表定制
/* 自定义样式表示例 */
QSpinBox {
border: 2px solid #2c3e50;
border-radius: 5px;
padding: 5px;
background: #ecf0f1;
}
QSpinBox::up-button {
subcontrol-origin: border;
subcontrol-position: right top;
width: 20px;
}
QSpinBox::down-button {
subcontrol-origin: border;
subcontrol-position: right bottom;
width: 20px;
}
4.2 功能扩展方法
- 创建派生类继承QSpinBox
- 重写键盘/鼠标事件
- 增加自定义验证逻辑
- 添加单位转换功能
- 实现复杂数值映射
五、典型应用案例
5.1 时间选择组件
// 创建时分秒选择器
QSpinBox *hourBox = new QSpinBox(this);
hourBox->setRange(0, 23);
hourBox->setDisplayIntegerBase(10);
hourBox->setPrefix("H: ");
QSpinBox *minuteBox = new QSpinBox(this);
minuteBox->setRange(0, 59);
minuteBox->setWrapping(true);
minuteBox->setPrefix("M: ");
5.2 进制转换器
// 十六进制数值输入
auto createHexSpinBox = [](){
QSpinBox *box = new QSpinBox;
box->setDisplayIntegerBase(16);
box->setPrefix("0x");
return box;
};