C++ Qt开发:SpinBox数值微调框组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QSpinBox精度数值组件的常用方法及灵活运用。
QSpinBox是Qt框架中的一个部件(Widget),用于提供一个方便用户输入整数值的界面元素。它通常以微调框(SpinBox)的形式展现,用户可以通过微调框上的按钮或手动输入来增加或减少整数值。在实际使用中该控件主要用于整数或浮点数的计数显示,与普通的LineEdit组件不同,该组件可以在前后增加特殊符号并提供了上下幅度的调整按钮,灵活性更强。
使用场景:
- 数值输入: 适用于需要用户输入整数值的场景,如设置参数、调整数量等。
- 调整参数: 在需要进行微小调整的地方,提供直观的增减按钮。
- 限制输入范围: 当需要确保用户输入在一定范围内时,可设置最小值和最大值。
- 只读展示: 可以用于只读展示某个数值,不允许用户修改。
以下是QSpinBox类的一些常用方法,说明并概述成表格:
| 方法 | 描述 |
|---|---|
QSpinBox(QWidget *parent = nullptr) |
构造函数,创建一个整数微调框。 |
int value() const |
获取当前微调框中的整数值。 |
void setValue(int value) |
设置微调框的整数值。 |
int minimum() const |
获取微调框的最小值。 |
void setMinimum(int min) |
设置微调框的最小值。 |
int maximum() const |
获取微调框的最大值。 |
void setMaximum(int max) |
设置微调框的最大值。 |
int singleStep() const |
获取单步步进值,即微调框在每次增减操作时的变化量。 |
void setSingleStep(int step) |
设置单步步进值。 |
int prefix() const |
获取前缀(显示在值之前的文本)。 |
void setPrefix(const QString &prefix) |
设置前缀。 |
int suffix() const |
获取后缀(显示在值之后的文本)。 |
void setSuffix(const QString &suffix) |
设置后缀。 |
QString cleanText() const |
获取文本表示的干净值,即不包含前缀和后缀的纯文本值。 |
bool wrapping() const |
检查微调框是否启用了循环,即在达到最大或最小值时是否绕回。 |
void setWrapping(bool on) |
启用或禁用微调框的循环。 |
void stepUp() |
将微调框的值增加一个单步步进值。 |
void stepDown() |
将微调框的值减少一个单步步进值。 |
void setAccelerated(bool on) |
启用或禁用加速,即按住上下箭头时值的变化速度是否逐渐加快。 |
bool isAccelerated() const |
检查是否启用了加速。 |
void setReadOnly(bool ro) |
设置微调框为只读模式,禁止用户编辑值。 |
bool isReadOnly() const |
检查微调框是否为只读模式。 |
void setAlignment(Qt::Alignment align) |
设置微调框中文本的对齐方式。 |
Qt::Alignment alignment() const |
获取微调框中文本的对齐方式。 |
void setButtonSymbols(QAbstractSpinBox::ButtonSymbols bs) |
设置增减按钮的显示方式。 |
QAbstractSpinBox::ButtonSymbols buttonSymbols() const |
获取增减按钮的显示方式。 |
这些方法涵盖了QSpinBox类中一些常用的设置和获取整数微调框属性的功能。
接下来我将用一个简单的案例展示如何使用SpinBox组件,该组件有两个版本SpinBox()用于展示单精度浮点数,而DoubleSpinBox()则可以展示精度更高的数值,需要注意的是,该组件有两个特殊参数,当使用setPrefix()时可以指定在前方加入特殊符号,而使用setSuffix()时则可以在后方追加特殊符号,我们就以后方追加为例,首先绘制一个窗体;

要实现计算流程很简单,只需要在按钮被触发时直接调用on_pushButton_clicked()按钮事件即可,其核心代码如下所示;
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 在组件后方设置$特殊符号
ui->spinBox->setSuffix(" $");
ui->spinBox_2->setSuffix(" $");
ui->doubleSpinBox->setSuffix(" $");
// 设置显示精度
ui->doubleSpinBox->setDecimals(6);
}
MainWindow::~MainWindow()
{
delete ui;
}
// 触发计算流程
void MainWindow::on_pushButton_clicked()
{
int x = ui->spinBox->value();
int y = ui->spinBox_2->value();
double total = x+y;
// 设置SpinBox数值(设置时无需转换)
ui->doubleSpinBox->setValue(total);
}
我们继续在SpinBox的基础上改进,如上代码中每次都需要点击计算按钮才能出结果,此时的需求是当SpinBox中的参数发生变化时自定的完成计算,这里就需要用到信号和槽了,当SpinBox被修改后,自动触发计算信号实现计算。该需求很容易被实现,只需要将信号绑定到特定的槽函数上即可,核心代码如下所示;
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 在组件后方设置$特殊符号
ui->spinBox->setSuffix(" $");
ui->spinBox_2->setSuffix(" $");
ui->doubleSpinBox->setSuffix(" $");
// 设置显示精度
ui->doubleSpinBox->setDecimals(6);
// 始终不可编辑
ui->doubleSpinBox->setEnabled(false);
// 将数量和单价两个SpinBox的valueChanged()信号与on_pushButton_clicked()槽关联
// 只要spinBox中的内容发生变化,则立即触发按钮完成计算
QObject::connect(ui->spinBox,SIGNAL(valueChanged(int)),this,SLOT(on_pushButton_clicked()));
QObject::connect(ui->spinBox_2,SIGNAL(valueChanged(int)),this,SLOT(on_pushButton_clicked()));
QObject::connect(ui->doubleSpinBox,SIGNAL(valueChanged(double)),this,SLOT(on_pushButton_clicked()));
}
编译并运行上述程序,当我们的两个选择框其中一个发生变化时,都会自动触发信号与on_pushButton_clicked()实现计算,效果图如下;

C++ Qt开发:SpinBox数值微调框组件的更多相关文章
- 关于QT Graphics View开启OpenGL渲染后复选框、微调框等无法正常显示的问题
之前学习QT Graphics View框架,除了基本的图元外,还可以通过QGraphicsProxyWidget类添加QT的基本Widget(如按钮.复选框.单选框等),常使用的场景类接口如下: Q ...
- C/C++ Qt ListWidget 列表框组件应用
ListWidget列表框组件,该组件与TreeWidget有些相似,区别在于TreeWidget可以实现嵌套以及多字段结构,而ListWidget组件则只能实现单字段结构,ListWidget组件常 ...
- Qt大型工程开发技术选型Part3:Qt调用C#编写的COM组件实例
Qt大型工程开发技术选型Part3:Qt调用C#编写的COM组件实例以及错误总结 ok,前面铺垫了那么多,现在来写一个开发实例,我会把其中隐藏的坑和陷阱简单谈谈,并在文章最后总结. 不愿意看长篇大论的 ...
- 基于arm的嵌入式QT开发(课程设计)
一. 项目要求 配置QT5.7基于x86及arm 等两种CPU架构的调试及开发环境: 移植arm编译后的QT5.7及屏幕校准工具tslib1.4至CORTEX ARM9实验平台: 开发基于QT5.7的 ...
- SNF快速开发平台MVC-高级查询组件
1. 高级查询 在我们做项目的时候经常想要按名称.编号进行查询数据,可在开发时会把最常用的查询条件写上,不常用的就不写了,也是因为把所有字段都写上太多了,布局不好看而且不实用.还有些查询条件几百年 ...
- 【PyQt5-Qt Designer】QDoubleSpinBox-小数微调框
QDoubleSpinBox-小数微调框 总体说明 大部分的总体说明和QSpinBox的差不多(详见:<PyQt5:微调框1>),这里主要把有差别的地方谈一下(三点). QDoubleSp ...
- 表单(下)-EasyUI Spinner 微调器、EasyUI Numberspinner 数值微调器、EasyUI Timespinner 时间微调器、EasyUI Slider 滑块
EasyUI Spinner 微调器 扩展自 $.fn.validatebox.defaults.通过 $.fn.spinner.defaults 重写默认的 defaults. 微调器(spinne ...
- Qt开发环境下载和安装
Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-project.org ...
- Android零基础入门第62节:搜索框组件SearchView
原文:Android零基础入门第62节:搜索框组件SearchView 一.SearchView概述 SearchView是搜索框组件,它可以让用户在文本框内输入文字,并允许通过监听器监控用户输入,当 ...
- 关于 Windows 下 Qt 开发,这个问题必须要搞清楚!
小伙伴们,大家好,小北师兄又来喂饭啦,从上次写完<一个例子让你秒懂 Qt Creator 编译原理>后,师兄对于 Qt 的一些环境配置有了更深的理解,这对师兄进行 Qt 的后续学习起到了很 ...
随机推荐
- [ABC129E] Sum Equals Xor
2023-01-15 题目 题目传送门 翻译 翻译 难度&重要性(1~10):4 题目来源 AtCoder 题目算法 dp/模拟 解题思路 我们都知道,异或是一种不进位的加法,而要想 $ a ...
- (2023.7.15)软件加密与解密-番外1-PWN2REVERSE[XDbg]
/提示:如果你看到了这行文字,那说明您的预览器不支持内嵌 CSS 代码,请使用 VSCode 阅读本 Markdown 文件/ 每天一个技术点 (2023.7.15)软件加密与解密-番外1-PWN2R ...
- SpringBoot获取树状结构数据-SQL处理
前言 在开发中,层级数据(树状结构)的获取往往可能是我们一大难点,我现在将自己获取的树状结构数据方法总结如下,希望能给有需要的小伙伴有所帮助! 一.测试数据准备 /* Navicat Premium ...
- 搭建企业知识库:基于 Wiki.js 的实践指南
一.简介 在当今知识经济时代,企业知识库的建设变得越来越重要.它不仅有助于企业知识的沉淀和共享,还能提升员工的工作效率,促进企业的创新发展.企业知识库是企业中形成结构化文档,共享知识的集群,可以促进企 ...
- 5 分钟理解 Next.js SSG (Static Site Generation / Static Export)
5 分钟理解 Next.js SSG (Static Site Generation / Static Export) 在本篇文章中,我们将介绍 Next.js 中的 SSG(静态网站生成)功能,以及 ...
- MapReduce和Spark读取HBase快照表
1.概述 随着大数据技术的不断发展,处理海量数据的需求变得愈发迫切.MapReduce作为一种分布式计算模型,为处理大规模数据提供了有效的解决方案.在这篇博客中,我们将探讨如何使用MapReduce框 ...
- 解密Prompt系列16. LLM对齐经验之数据越少越好?LTD & LIMA & AlpaGasus
LLM Agent中间插个队,总结下指令微调.对齐数据相关的方案,已经凑够7篇论文可以召唤神龙啦!论文都是以优化指令样本为核心,Data-Centric的观点比较一致:指令微调也就是对齐阶段的数据质量 ...
- 其它——DevOps简介
文章目录 DevOps简介 DevOps的概念 历史变革 好处是什么? 为什么DevOps会兴起? 实现DevOps需要什么? DevOps的采用现状 DevOps简介 DevOps 是一个完整的面向 ...
- P6346 [CCO2017] 专业网络 & CF1251E1 Voting(Easy Version)
analysis 这个题目我们可以考虑用贪心来做. 我们不难看出来,这个题目是要让我们推出这么个结论:花小钱,办大人. 整体贪心的思路就出来了,然后就是实现部分. 因为我们认识的人随便是谁都可以.所以 ...
- 【Unity3D】动态路径特效
1 前言 本文通过导航系统(NavMeshAgent)和线段渲染器(LineRenderer)实现了角色走迷宫和绘制路径功能,同时实现动态路径特效. 导航系统的介绍详见博客:导航系统.分离路面 ...