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

【Qt开发】输入类控件(三)-> QComboBox

目录

1 -> 概述

2 -> 核心属性

3 -> 核心方法

4 -> 核心信号

5 -> 基本功能特性

6 -> 高级特性

7 -> 适用场景

8 -> 代码示例

8.1 -> 使用下拉框模拟麦当当点餐

8.2 -> 从文件中加载下拉框的选项

9 -> 总结


1 -> 概述

在图形用户界面设计中,如何在一个有限的空间内,为用户提供一个包含多个选项的集合,是一个经典的设计挑战。Qt 框架给出的答案之一,便是强大而灵活的 QComboBox(组合框)控件。它不仅仅是一个简单的下拉列表,更是 Qt “模型-视图”架构和高效人机交互理念的一个缩影。

QComboBox 的核心价值在于其空间效率。在非激活状态下,它仅以一个单行文本框或按钮的形式呈现,显示当前选中的项目。当用户需要做出选择时,通过点击触发,一个包含所有可选项目的列表会下拉展开。这种“按需展开”的交互模式,使其非常适合放置在拥挤的工具栏、表单或对话框之中,在不干扰主界面简洁性的前提下,容纳大量的选择可能性。

2 -> 核心属性

属性说明
currentText当前选中的文本
currentIndex

当前选中的条目下标

从 0 开始计算,如果当前没有条目被选中,值为 -1

editable

是否允许修改

设为 true 时,QComboBox 的行为就非常接近 QLineEdit,也可以设置 validator

iconSize下拉框图标(小三角)的大小
maxCount最多允许有多少个条目

3 -> 核心方法

方法说明
addItem(const QString&)添加一个条目
currentIndex()

获取当前条目的下标

从 0 开始计算,如果当前没有条目被选中,值为 -1

currentText()获取当前条目的文本内容

4 -> 核心信号

方法说明

activated(int)

activated(const QString &text)

当用户选择了一个选项时发出

这个时候相当于用户点开下拉框,并且鼠标划过某个选项

此时还没有确认做出选择

currentIndexChanged(int)

当前选项改变时发出

此时用户已经明确的选择了一个选项

用户操作或者通过程序都会触发这个信号

editTextChanged(const QString &text)

当编辑框中的文本改变时发出

(editable 为 true 时有效)

5 -> 基本功能特性

一个基础的 QComboBox 提供了以下关键功能:

  • 当前项显示与获取:始终清晰地标示出用户当前的选择,并允许程序轻松获取该值。

  • 可编辑性:这是一个至关重要的特性。开发者可以将其设置为可编辑模式。在此模式下,用户不仅可以从预定义列表中选择,还可以直接在文本框内输入自定义内容。这使得 QComboBox 兼具了选择器和文本输入框的双重角色,非常适合需要输入常用值或允许例外情况的场景。

  • 项目列表管理:开发者可以动态地添加、插入、修改或移除列表中的项目。每个项目不仅可以包含文本,还可以关联一个图标,以增强视觉辨识度。

6 -> 高级特性

QComboBox 的真正强大之处在于它与 Qt 框架核心思想的深度集成:

  1. 信号与槽机制:当组合框的当前选中项发生变化时,它会自动发出信号。开发者可以将其连接到任何自定义的槽函数上。这种松耦合的设计使得业务逻辑能对用户的选择做出即时响应,而无需编写繁琐的事件处理代码,是实现功能模块化的典范。

  2. 模型-视图架构的支持:QComboBox 不仅仅是一个存储项目的简单容器。它可以作为一个视图,直接与一个外部的数据模型 绑定。这意味着列表的内容可以来自一个数据库查询的结果、一个文件系统的目录结构,或任何其他自定义的数据源。当底层数据发生变化时,组合框的显示会自动更新,极大地简化了数据驱动型界面的开发。

  3. 自定义视图:这是 QComboBox 最令人惊叹的特性之一。开发者可以为其下拉列表部分设置一个完全自定义的视图。你不再局限于显示简单的文本和图标列表,而是可以嵌入进度条、复选框,甚至是复杂的自定义控件。这彻底打破了传统下拉列表的形态,为实现高度定制化的用户界面提供了无限可能。

  4. 数据角色与存储:除了显示的文本,每个项目还可以通过“角色”关联多种类型的数据。例如,一个显示国家名称的项目,可以内部关联其国家代码、国旗图片、人口数据等。这使得在向用户展示友好文本的同时,程序内部可以处理更丰富、更结构化的信息。

7 -> 适用场景

QComboBox 体现了 Qt 的设计哲学:为开发者提供功能完备的基础构建块,同时保留极大的扩展性和灵活性。它既满足了“开箱即用”的快速开发需求,又能通过高级特性应对复杂和特殊的界面要求。

其典型的应用场景包括:

  • 设置与偏好:如语言选择、主题切换、单位设置等。

  • 数据筛选:如在表格上方选择要查看的类别或时间段。

  • 表单输入:如选择国家、省份、职业等具有固定选项集的信息。

  • 命令历史:在可编辑模式下,作为命令行或搜索框,保存用户的历史输入。

8 -> 代码示例

8.1 -> 使用下拉框模拟麦当当点餐

1. 在界面上创建三个下拉框,和一个按钮

objectName 为默认

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->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->comboBox_3->addItem("雾粉荔枝汽水");}Widget::~Widget()
{delete ui;
}

3. 编写 widget.cpp,给按钮添加 slot 函数

void Widget::on_pushButton_clicked()
{qDebug() << ui->comboBox->currentText() << ","<< ui->comboBox_2->currentText() << ","<< ui->comboBox_3->currentText();
}

4. 执行程序,可以看到,在点击确定按钮的时候,可以获取到当前下拉框中选中的内容

8.2 -> 从文件中加载下拉框的选项

很多时候下拉框的选项并非是固定的,而是通过读取文件/读取网络获取到的

1. 在界面上创建一个下拉框

2. 创建 config.txt,编写选项,每个选项占一行

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

  • 使用 ifstream 打开文件
  • 使用 getline 读取每一行
  • 使用 QString::fromStdString 把 std::string 转成 QString
#include "widget.h"
#include "ui_widget.h"#include <QDebug>
#include <fstream>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);std::ifstream file("E:\\Gitee_Qt\\qt-daily-learning\\QComboBox_2\\config.txt");if (!file.is_open()){qDebug() << "文件打开失败";return;}std::string line;while (std::getline(file, line)){ui->comboBox->addItem(QString::fromStdString(line));}}Widget::~Widget()
{delete ui;
}

4. 执行程序,可以看到,文件内容已经被加载到下拉框中

Qt 中也提供了 QFile 实现读写文件的功能。当然使用 C++ 标准库的 std::fstream 也是完全可以的。

之所以存在两套,是因为 Qt 诞生比较早(1991年左右),此时 C++ 还没有完成 “标准化” 的工作,C++ 标准库这样的概念自然也没有诞生。

因此 Qt 就自己打造了一套库,实现了字符串,容器,文件操作,多线程,网络操作,定时器,正则表达式等内容。

9 -> 总结

总而言之,QComboBox 在 Qt 控件家族中扮演着一个不可或缺的角色。它从一个简单的空间节约工具出发,通过其可编辑性、强大的信号与槽机制、对模型-视图架构的完美支持以及惊人的可定制能力,演变成了一个功能全面且极具表现力的界面元素。理解并善用 QComboBox,不仅能够构建出更加高效、专业的用户界面,更能深刻体会到 Qt 框架致力于提升开发效率与界面表现力的核心思想。它是在简洁与强大之间找到的一个完美平衡点。


感谢各位大佬支持!!!

互三啦!!!

http://www.dtcms.com/a/422620.html

相关文章:

  • 什么是专用对讲机?遨游专用对讲机有什么优势?
  • 港大和字节携手打造WorldWeaver:以统一建模方案整合感知条件,为长视频生成领域带来质量与一致性双重飞跃。
  • 第三方软件测试公司:【Gatling基于Scala的开源高性能负载测试工具】
  • Social-Auto-Upload - 多平台社交媒体视频自动化上传工具
  • 十一、Hadoop 三种部署模式对比表 组件介绍
  • 十、Hadoop 核心目录功能说明表
  • Leetcode+Java+图论+岛屿问题
  • 容器内部DNS解析针对美国服务器微服务的调试指南
  • 生物科技公司网站模板下载织梦教育咨询企业网站模板
  • 镇江网站建设要多少钱开网店3个月来亏了10万
  • 入侵检测系统(IDS)和入侵防御系统(IPS)
  • 【Youtube】油管上有哪些计算机或互联网历史故事频道?
  • 设计模式:单例模式。饿汉式、懒汉式
  • 如何在项目中选择使用HTTP还是WebSocket?
  • 【代码的暴力美学】-- C语言基础编程题_2
  • GPIO 控制和操作-使用命令通过sysfs文件系统控制GPIO
  • MySQL InnoDB存储引擎表的逻辑存储结构及实现原理详细介绍
  • 网站建设实习周记网站推广建设策略
  • RN 升级react-native 版本
  • RabbitMQ 消费异常:库存不足无法释放的定位与解决
  • 邳州做网站pzwode网站开发的相关技术
  • 精读C++20设计模式——结构型设计模式:代理模式
  • C# 循环和条件用法大全(while dowhile for foreach if Switch try)全站最全
  • 设计模式(C++)详解——中介者模式(3)
  • 小程序原创--基于微信开发者工具实现的猜谜游戏程序
  • 如何进行WGBS的数据挖掘——从甲基化水平到功能通路
  • C# 23种设计模式详解与示例
  • 以创新技术解决客户痛点 在细分领域铸就核心竞争力新天力叩响资本市场大门
  • 14.单臂路由(2025年9月29日)
  • 湖南网站建设平台配置asp网站