当前位置: 首页 > news >正文

12.QT-Combo Box|Spin Box|模拟点餐|从文件中加载选项|调整点餐份数(C++)

Combo Box

QComboBox 表⽰下拉框

核⼼属性

属性说明
currentText当前选中的⽂本
currentIndex当前选中的条⽬下标.
从0开始计算.如果当前没有条⽬被选中,值为-1
editable是否允许修改
设为true时, QComboBox 的⾏为就⾮常接近 QLineEdit ,也可以
设置 validator
iconSize下拉框图标(⼩三⻆)的⼤⼩
maxCount最多允许有多少个条⽬

核⼼⽅法

⽅法说明
addItem(const QString&)添加⼀个条⽬
currentIndex()获取当前条⽬的下标
从0开始计算.如果当前没有条⽬被选中,值为-1
currentText()获取当前条⽬的⽂本内容.

核⼼信号

方法说明
activated(int)
activated(const QString& text)
当⽤⼾选择了⼀个选项时发出.
这个时候相当于⽤⼾点开下拉框,并且⿏标划过某个选项.
此时还没有确认做出选择.
currentIndexChanged(int)
currentIndexChanged(const QString
& text)
当前选项改变时发出.
此时⽤⼾已经明确的选择了⼀个选项.
⽤⼾操作或者通过程序操作都会触发这个信号.
editTextChanged(const QString &
text)
当编辑框中的⽂本改变时发出
(editable为true时有效
代码⽰例:使⽤下拉框模拟⻨当劳点餐

1)在界⾯上创建三个下拉框,和⼀个按钮.
![[Pasted image 20250421084752.png]]

2)编写widget.cpp,初始化三个下拉框的内容

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>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("雪碧");
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{qDebug() << ui->comboBox->currentText() << ", " << ui->comboBox_2->currentText() << ", " << ui->comboBox_3->currentText();
}

![[Pasted image 20250421085244.png]]

也可以在图形界面,右键添加项目
![[Pasted image 20250421085414.png]]

代码⽰例:从⽂件中加载下拉框的选项

很多时候下拉框的选项并⾮是固定的,⽽是通过读取⽂件/读取⽹络获取到的
1)在界⾯上创建⼀个下拉框
![[Pasted image 20250421091056.png]]

2)创建⽂件config.txt ,编写选项.每个选项占⼀⾏.
![[Pasted image 20250421091046.png]]

3)修改widget.cpp,从⽂件中读取选项.

  • 使⽤ ifstream 打开⽂件
  • 使⽤ getline 读取每⼀⾏
  • 使⽤ QString::fromStdString 把 std::string 转成 QString
#include "widget.h"
#include "ui_widget.h"#include <fstream>
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//读取文件内容,把文件中的每一行读取出来,作为选项std::ifstream file("F:/Qt/QT Work/qcombobox1/config.txt");if (!file.is_open()) {qDebug() << "文件打开失败";return;}//按行读取文本内容getlinestd::string line;while (std::getline(file, line)) {//取到的内容都设置到下拉框中ui->comboBox->addItem(QString::fromStdString(line));}file.close();
}Widget::~Widget()
{delete ui;
}

![[Pasted image 20250421092805.png]]

Qt中也提供了QFile实现读写⽂件的功能.当然使⽤C++标准库的std::fstream也是完全可以的.
之所以存在两套,是因为Qt诞⽣较早(1991年左右),此时C++还没有完成"标准化"的⼯作,C++标准库这样的概念⾃然也没有诞⽣.
因此Qt就⾃⼰打造了⼀套库,实现了字符串,容器,⽂件操作,多线程,⽹络操作,定时器,正则表达式等内容.(由于C++标准委员会的不作为,⾄今仍然有些Qt提供的功能,是标准库不具备的)

Spin Box

使⽤ QSpinBox 或者 QDoubleSpinBox 表⽰"微调框",它是带有按钮的输⼊框.可以⽤来输⼊整数/浮点数.通过点击按钮来修改数值⼤⼩.
由于 SpinBox 和 QDoubleSpinBox ⽤法基本相同,就只介绍 SpinBox 的使⽤了.

关键属性

属性说明
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()信号.
核⼼信号
信号说明
textChanged(QString)微调框的⽂本发⽣改变时会触发.
参数QString带有前缀和后缀.
valueChanged(int)微调框的⽂本发⽣改变时会触发.
参数int,表⽰当前的数值.
代码⽰例:调整⻨当劳购物⻋中的份数

1)在界⾯上创建下列内容

  • 三个下拉框: objectName 为 comboBox 到 comboBox_3
  • 三个微调框: objectName 为 spinBox 到 spinBox_3
  • ⼀个按钮: objectName 为 pushButton
    ![[Pasted image 20250421100004.png]]

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

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>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("雪碧");
}Widget::~Widget()
{delete ui;
}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)执⾏程序,可以看到当⽤⼾选择不同的内容时,点击按钮就能获取到对应的结果
![[Pasted image 20250421100624.png]]

    //针对QSpinBox的范围进行设置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);

![[Pasted image 20250421101633.png]]

相关文章:

  • Java学习手册:HTTP 协议基础知识
  • SQL Server基础
  • 240421 leetcode exercises
  • 分数线降低,25西电马克思主义学院(考研录取情况)
  • leetcode day 35 01背包问题 416+1049
  • 智能安全用电系统预防电气线路老化、线路或设备绝缘故障
  • 开箱即用:一款带世界时钟简约好用在线时间戳转换工具源码
  • 【PCB绘制】信号完整性准则
  • 【PCIE730】基于PCIe总线架构的4路10G光纤通道适配器
  • SpringCloud和SpringCloudAlibaba技术栈全面对比
  • 基于STC89C52RC和8X8点阵屏、独立按键的小游戏《打砖块》
  • 海外服务器安装Ubuntu 22.04图形界面并配置VNC远程访问指南
  • 【工具使用-数据库】MySQL数据库创建和使用
  • 反射内存网技术应用于数控系统
  • GAIA-2:用于自动驾驶的可控多视图生成世界模型
  • 使用stream进行列表循环和直接forEach循环的差异及使用场景
  • 支持远程搜索、分页加载和多选功能的 el-select 组件
  • SpringBoot自定义验证器:企业级参数校验架构设计与实践
  • 流量抓取工具(wireshark)
  • docker 中将dpo后的模型转为ollama能够调用的gguf格式
  • “何以中国·闽山闽水物华新”网络主题宣传活动在福建武夷山启动
  • 为青少年写新中国成立的故事,刘统遗著《火种》出版
  • “解压方程式”主题沙龙:用艺术、精油与自然的力量,寻找自我疗愈的方式
  • 广东省东莞市委原书记、市人大常委会原主任徐建华被开除党籍
  • 美国同日曝两起泄密事件:防长群聊向家人分享作战计划,白宫平面图被“共享”
  • 河南一季度GDP为14945.58亿元,同比增长5.9%