C++ Qt开发:ComboBox下拉组合框组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ComboBox下拉组合框组件的常用方法及灵活运用。
在Qt中,ComboBox(组合框)是一种常用的用户界面控件,它提供了一个下拉列表,允许用户从预定义的选项中选择一个。该组件提供了一种方便的方式让用户从预定义的选项中进行选择,一般来说ComboBox会以按钮的形式显示在界面上,用户点击按钮后,会弹出一个下拉列表,其中包含预定义的选项。当然ComboBox不仅局限于选择,也允许用户手动输入内容。
下面是QComboBox类的一些常用方法的说明和概述,按照表格形式列出:
| 方法 | 描述 |
|---|---|
QComboBox(QWidget *parent = nullptr) |
构造函数,创建一个组件对象。 |
addItem(const QString &text, const QVariant &userData = QVariant()) |
向组件添加一个项,可以附带用户数据。 |
addItems(const QStringList &texts) |
向组件添加多个项,使用字符串列表。 |
insertItem(int index, const QString &text, const QVariant &userData = QVariant()) |
在指定索引处插入一个项。 |
insertItems(int index, const QStringList &texts) |
在指定索引处插入多个项。 |
removeItem(int index) |
移除指定索引处的项。 |
clear() |
清除组件中的所有项。 |
setCurrentIndex(int index) |
设置组件当前选择的项的索引。 |
currentText() |
返回当前组件中显示的文本。 |
currentIndex() |
返回当前组件中选择的项的索引。 |
count() |
返回组件中项的总数。 |
itemText(int index) |
返回指定索引处项的文本。 |
itemData(int index, int role = Qt::UserRole) |
返回指定索引处项的用户数据。 |
setItemText(int index, const QString &text) |
设置指定索引处项的文本。 |
setItemData(int index, const QVariant &value, int role = Qt::UserRole) |
为指定索引处项设置额外的数据。 |
clearEditText() |
清除组件的编辑文本。 |
setEditable(bool editable) |
设置组件是否可编辑。如果可编辑,用户可以手动输入文本。 |
setMaxCount(int max) |
设置组件中显示的最大项数。如果超过该数目,将出现垂直滚动条。 |
setMinimumContentsLength(int characters) |
设置组件的最小内容长度,以便显示完整的项。 |
setModel(QAbstractItemModel *model) |
设置组件的数据模型。通过模型,可以更灵活地管理组件中的项。 |
view() |
返回组件的视图,允许对视图进行定制。 |
clear() |
清除组件中的所有项。 |
showPopup() |
打开组件的下拉列表。 |
hidePopup() |
隐藏组件的下拉列表。 |
activated(int index) |
信号,当用户选择组件中的项时发出。 |
currentIndexChanged(int index) |
信号,当组件中的当前项发生变化时发出。 |
上述这些方法提供了对ComboBox进行配置、管理和与之交互的灵活性。你可以根据具体的应用需求使用这些方法,使ComboBox在你的Qt应用程序中按照期望的方式工作。
如下图所示,我们分别增加三个ComboBox组件,其中前两个组件是默认的,最后一个是Font ComboBox字体选择框,其实该选择框也是标准选择框的模板,只不过其默认为我们初始化了系统字体方便选择而已但在使用上与ComboBox是一致的。

通常情况下使用ComboBox组件与前几章中所示案例保持一致,只需要通过ui->comboBox_Main->调用不同的属性即可实现赋值或取值,此处我们来演示一个更复杂的需求,实现选择组件的联动效果,即用户选择主选择框时自动列出该主选择框的子项,这也是开发中最常见的需求。
首先我们先来演示一下如何向Main选择框内批量追加选项,为了能更好的展示图标的导入,此处分别增加browser alt.ico和ksirtet.ico两个ICO图标,读者可通过 《C++ Qt开发:PushButton按钮组件》中所使用的方法将图标导入,接着在主函数初始化中我们可以使用以下代码将其初始化。
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
QIcon icon;
icon.addFile(":/image/ksirtet.ico");
// 填充第一个Main
for(int x=0;x<10;x++)
{
ui->comboBox_Main->addItem(icon,QString::asprintf("元素_%d",x));
}
// 填充第二个SubMain
icon.addFile(":/image/browser alt.ico");
for(int x=0;x<10;x++)
{
ui->comboBox_SubMain->addItem(icon,QString::asprintf("元素_%d",x));
}
}
运行上述代码片段,则可以输出如下图所示的效果,可以看到两个选择框已被初始化。

接着我们来实现菜单的联动,该功能的实现依赖于QMap容器,其中Key定义地区,而Value值则定义一个QList该容器类存储特定地区的城市,如下核心代码中MainWindow用于初始化,将默认的comboBox_Main填充为四大地区,依次初始化map容器映射。
#include <iostream>
#include <QList>
#include <QMap>
// --------------------------------------
// 定义全局变量
// --------------------------------------
// 存储城市与ID
QMap<QString,int> City_Zone;
// 存储地区与城市
QMap<QString,QList <QString>> map;
// 临时变量
QList<QString> tmp;
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// --------------------------------------------
// comboBox_Main设置主菜单
ui->comboBox_Main->clear();
QStringList str;
str << "北京" << "上海" << "广州" << "深圳";
// 添加元素到主菜单
ui->comboBox_Main->addItems(str);
// 依次设置图标
ui->comboBox_Main->setItemIcon(0,QIcon(":/image/ksirtet.ico"));
ui->comboBox_Main->setItemIcon(1,QIcon(":/image/ksirtet.ico"));
ui->comboBox_Main->setItemIcon(2,QIcon(":/image/ksirtet.ico"));
ui->comboBox_Main->setItemIcon(3,QIcon(":/image/ksirtet.ico"));
// --------------------------------------------
// 设置城市和序号
ui->comboBox_Main->clear();
City_Zone.insert("请选择",0);
City_Zone.insert("北京",1);
City_Zone.insert("上海",2);
City_Zone.insert("广州",3);
City_Zone.insert("深圳",4);
// --------------------------------------------
// 循环填充一级菜单
ui->comboBox_Main->clear();
foreach(const QString &str,City_Zone.keys())
{
ui->comboBox_Main->addItem(QIcon(":/image/ksirtet.ico"),str,City_Zone.value(str));
}
// --------------------------------------------
// 插入二级菜单
tmp.clear();
tmp << "大兴区" << "昌平区" << "东城区" << "西城区";
map["北京"] = tmp;
tmp.clear();
tmp << "黄浦区" << "徐汇区" << "长宁区" << "杨浦区";
map["上海"] = tmp;
tmp.clear();
tmp << "荔湾区" << "越秀区" << "花都区" << "增城区";
map["广州"] = tmp;
tmp.clear();
tmp << "罗湖区" << "福田区" << "龙岗区" << "光明区";
map["深圳"] = tmp;
// 设置默认选择第4个
ui->comboBox_Main->setCurrentIndex(4);
}
菜单联动的第二部则是对特定槽函数的实现,当我们点击comboBox_Main组件时,触发currentTextChanged(QString)槽函数,此时只需要在全局map容器内提取出所需要的子标签,并依次赋值到comboBox_SubMain组件内即可,代码如下所示;
// 触发子标签填充
void MainWindow::on_comboBox_Main_currentTextChanged(const QString &arg1)
{
ui->comboBox_SubMain->clear();
QList<QString> qtmp;
qtmp = map.value(arg1);
for(int x=0;x<qtmp.count();x++)
{
ui->comboBox_SubMain->addItem(QIcon(":/image/browser alt.ico"),qtmp[x]);
}
}
// 触发按钮点击
void MainWindow::on_pushButton_clicked()
{
QString one = ui->comboBox_Main->currentText();
QString two = ui->comboBox_SubMain->currentText();
std::cout << one.toStdString().data() << " | " << two.toStdString().data() << std::endl;
}
运行后输出效果如下,当读者选择主选择框时子选择框将被填充,此时读者只需要根据标签号的对应关系,即可判断用户选择了那个选项。

C++ Qt开发:ComboBox下拉组合框组件的更多相关文章
- [js开源组件开发]模拟下拉选项框select
模拟下拉选项框select 在css3流行的情况下,下拉框还是无法满足PD的需求,所以有了autosearch,有了模拟下拉框.效果如下图: select DEMO请案例点击这里查看.http://w ...
- 微信小程序之自定义select下拉选项框组件
知识点:组件,animation,获取当前点击元素的索引与内容 微信小程序中没有select下拉选项框,所以只有自定义.自定义的话,可以选择模板的方式,也可以选择组件的方式来创建. 这次我选择了组件, ...
- WeChat-SmallProgram:自定义select下拉选项框组件
1):创建组件所需的文件 2):自定义组件 CSS 及 JS 组件的wxml: <view class='com-selectBox'> <view class='com-sCont ...
- objectARX 添加线型下拉组合框空间 CAcUiLineTypeComboBox
不知道是有意还是无意,objectARX的所有文档中,居然没有CAcUiLineTypeComboBox, 而实际上这个是存在的.位于\inc\acuiComboBox.h 而在添加变量的向导中也没有 ...
- ObjectARX对话框添加颜色下拉组合框
建立Arx基本对话框,最好是基于CAcUidialog类. 首先添加combox控件更改一下属性: 先修改Owner Draw为Fixed,再更改Has Strings 为true Has Strin ...
- 自绘制HT For Web ComboBox下拉框组件
传统的HTML5的下拉框select只能实现简单的文字下拉列表,而HTforWeb通用组件中ComboBox不仅能够实现传统HTML5下拉框效果,而且可以在文本框和下拉列表中添加自定义的小图标,让整个 ...
- 由于抽签HT For Web ComboBox下拉框组件
传统HTML5的下拉框select仅仅能实现简单的文字下拉列表,而HT for Web通用组件中ComboBox不仅可以实现传统HTML5下拉框效果,并且可以在文本框和下拉列表中加入自己定义的小图标, ...
- 快速设计ComboBox下拉框
传统软件项目开发时,需要每个控件一个一个的来设计,同时需要在页面功能中对每个控件的属性进行判定处理,尤其是页面风格布局样式需要花去一大半的时间,并且后续要想修改是非常麻烦繁琐,这样就导致设计完成一个功 ...
- winform c#绑定combobox下拉框 年度代码。
winform c#绑定combobox下拉框 年度代码. comboBox1.Items.AddRange("});//邦定数据 comboBox1.Text = DateTime.Now ...
- sencha combobox下拉框不用jsonstore,直接使用字符串数组做数据源
combobox下拉框的store除了可以选择一个jsonstore来加载数据,还可以直接使用符串Array做数据源. { xtype: 'combobox', fieldLabel: 'Label' ...
随机推荐
- 【LaTeX】语法(更新中)
目录 长度 空行 空格 超链接 数学公式 段落中(隐式) 单独成段(显式) 居中,左对齐,右对齐 居中 左对齐 右对齐 参考文献配置 TODO 参考资料 中文支持参考环境配置中的 内容,在这里不做重复 ...
- ChatGPT接入Siri(保姆级教程)
今天,我将为大家分享如何将ChatGPT应用集成到苹果手机的Siri中 (当然手机是需要魔法(TZ)的) 第一步:获取OpenAPI的Key 提取API网址:https://platform.open ...
- 《SQL与数据库基础》16. 锁
目录 锁 全局锁 表级锁 表锁 元数据锁 意向锁 行级锁 行锁 间隙锁 临键锁 本文以 MySQL 为例 锁 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU. ...
- ShardingSphere实战
前言 本文主要从sharding最新版本5.1.2版本入手搭建,按主键ID和时间进行分表. 本文主要介绍搭建过程,有兴趣了解shardingsphere的同学可以先自行查阅相关资料. shardsph ...
- Frida环境配置
目录 安装Linux客户端 配置Android服务端 测试运行效果 官方手册 安装Linux客户端 github地址:https://github.com/frida/frida pip instal ...
- Java开发面试--Redis专区
1. 什么是Redis?它的主要特点是什么? 答: Redis是一个开源的.基于内存的高性能键值对存储系统.它主要用于缓存.数据存储和消息队列等场景. 高性能:Redis将数据存储在内存中,并采用单线 ...
- 开源.NetCore通用工具库Xmtool使用连载 - 扩展动态对象篇
[Github源码] <上一篇> 介绍了Xmtool工具库中的图形验证码类库,今天我们继续为大家介绍其中的扩展动态对象类库. 扩展动态对象是整个工具库中最重要的一个设计.在软件开发过程中, ...
- 17. 从零开始编写一个类nginx工具, Rust中一些功能的实现
wmproxy wmproxy将用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,后续将实现websocket代理, 内外网穿透等, 会将实现过程分享出来, 感 ...
- 虹科分享|虹科Redis企业版数据库带你跑赢MySQL数字时代!
数字革命悄然爆发,数据库也将成为率先破局的关键技术! 借着互联网爆发的东风,前几年MySQL以其过硬的产品能力及开源优势,一度成为全球最受欢迎的关系型数据库.然而,革命的漫长之路才刚开始,MySQL是 ...
- U盘插入过手机后再拔出来,windows无法识别的解决办法
win键+X,设备管理器. 找到"通用串行总线控制器",大容量USB设备,右键,卸载设备. 拔出U盘,再插入U盘. 就好了. 很明显,U盘插入手机,然后设置里点弹出后再拔,这是很规 ...