这个是最近的一个项目上需要实现的功能。要求如下:

  1. 下拉列表的项目可以多选
  2. 显示框不能编辑
  3. 所选中的项目在显示框中出现

下面根据网上的提示代码(参照博客 一去二三里),主要实现如下代码(与参照略有不同):

实现方案:

QListWidget、QListWidgetItem、QComboBox

初始化控件及模拟数据填充:

     comboBox = new QComboBox(this); //初始化显示控件

     QHBoxLayout* mainLayout = new QHBoxLayout(this);
mainLayout->addWidget(comboBox);
setLayout(mainLayout); //初始化数据源
listWidget = new QListWidget;
for(int i = ; i < ; ++i)
{
QListWidgetItem* item = new QListWidgetItem(tr.("Item %1").arg(i));
item->setCheckState(Qt::Unchecked); //显示复选框 listWidget->addItem(item);
} //默认选中第一个数据
QListWidgetItem* item = listWidget->item();
if(item)
{
item->setCheckState(Qt::Checked);
} //设置数据源到显示控件中
comboBox->setModel(listWidget->model());
comboBox->setView(listWidget); //设置只读编辑框
comboBox->setEditable(true);
QLineEdit* lineEdit = comboBox->lineEdit();
if(lineEdit)
{
lineEdit->setReadOnly(true);
} setMinimumWidth(); //更新显示的内容
connect(comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onCurrentIndexChanged(int)));

更新显示内容的代码如下(需要在头文件中设置该函数为槽函数):

     //获取当前点击的对象
QListWidgetItem* item = listWidget->item(index);
if(!item)
return ; //更新当前点击对象的选中状态
if(item->checkState() == Qt::Unchecked)
{
item->setCheckState(Qt::Checked);
}
else
{
item->setCheckState(Qt::Unchecked);
} //循环获取所有选中状态的对象显示文字
QString text;
for(int row = , rows = listWidget->count(); row < rows; ++row)
{
QListWidgetItem* item = listWidget->item(row);
if(item && item->checkState() == Qt::Checked)
{
text.append(item->text() + ";");
}
} //更新显示控件的文字
comboBox->lineEdit()->setText(text.mid(, text.size() - ));

完整的实现代码,请点击 这里

MultiComboBox文件夹里包含所有的实现文件

在QComboBox的基础上实现复选功能的更多相关文章

  1. QComboBox实现复选功能

    需求: 下拉列表有复选功能 不可编辑 显示所有选中项   关于QComboBox的复选功能有几种方案: QStandardItemModel + QStandardItem QListWidget + ...

  2. QComboBox实现复选功能(三种方法:嵌套QListWidget, 设置QStandardItemModel, 设置Delegate)

    今天介绍一下一个小东西 — 如何让QComboBox实现复选功能?   需求: 下拉列表有复选功能 不可编辑 显示所有选中项   关于QComboBox的复选功能有几种方案: QStandardIte ...

  3. QT 创建一个具有复选功能的下拉列表控件

    最近研究了好多东西,前两天突然想做一个具有复选功能的下拉列表框.然后在网上"学习"了很久之后,终于发现了一个可以用的,特地发出来记录一下. 一.第一步肯定是先创建一个PROJECT ...

  4. Flex 扩展combobox 实现复选功能

    前段时间,老大召唤,给个任务,研究一下flex的combobox控件 实现复选功能(flex自带的combobox控件不可以复选),小兵能力有限,哪里可以扩展呀,网上看了别人写的,发现总是有点瑕疵(关 ...

  5. duilib 修复CTreeViewUI复选功能判断不准确的bug

    转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42265209 CTreeViewUI里面自带了复选的功能,但是复选功能存在 ...

  6. [Selenium With C#基础教程] Lesson-07 复选框

    作者:Surpassme 来源:http://www.jianshu.com/p/98ede43da3c3 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢.   [作者:Surp ...

  7. Jquery通过AJAX从后台获取数据显示在表格上(复选)

    代码: function GetMultiLineSelectTable(tableId, selectIds) { var table = $(tableId); var url = table.d ...

  8. (Map)利用Map,完成下面的功能:  从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。  附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录 (Map)在原有世界杯Map 的基础上,增加如下功能: 读入一支球队的名字,输出该球队夺冠的年份列表。 例如,读入“巴西”,应当输出 1958 1962 1970 1

    package homework001; import java.util.HashMap; import java.util.Scanner; public class Map { public s ...

  9. 为DataGridView控件实现复选功能

    实现效果: 知识运用: DataGridViewCheckBoxColumn类 实现代码: private class Fruit { public int Price { get; set; } p ...

随机推荐

  1. 前端构建工具之争——Webpack vs Gulp 谁会被拍死在沙滩上

    .table tr>td:nth-child(1){width: 2em !important;padding-left: .6rem !important;padding-right: .6r ...

  2. linux磁盘管理系列-LVM的使用

    LVM是什么 LVM是Linux操作系统的逻辑卷管理器. 现在有两个Linux版本的LVM,分别是 LVM1,LVM2.LVM1是一种已经被认为稳定了几年的成熟产品,LVM2 是最新最好的LVM版本. ...

  3. icheck如何修改样式大小

    icheck默认样式比较大,有需求调整checkbox大小. 1. 最简单的方法可用css3来实现,让整个模块层缩放,不兼容低版本浏览器. transform:scale(0.7,0.7)   2. ...

  4. 项目实战11—企业级nosql数据库应用与实战-redis的主从和集群

    企业级nosql数据库应用与实战-redis 环境背景:随着互联网2.0时代的发展,越来越多的公司更加注重用户体验和互动,这些公司的平台上会出现越来越多方便用户操作和选择的新功能,如优惠券发放.抢红包 ...

  5. centOS 搭建pipelineDB docs

    #下载docs git clone https://github.com/pipelinedb/docs.git #安装python-sphinx &python-dev yum instal ...

  6. IE之页面加载慢.

    场景 场景是大屏页面一张深色背景, 里面一些文本元素以及图表展示. 结果在IE下发现加载异常缓慢, 还有部分人员反馈页面卡死. 后台读写优化 默认处理图片逻辑是, ImageIO读取原图, 转成byt ...

  7. Python爬虫(十九)_动态HTML介绍

    JavaScript JavaScript是网络上最常用也是支持者对多的客户端脚本语言.它可以收集用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏. 我们可以在网页源 ...

  8. idea快速搭建springboot项目

    Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程.它主要推崇的是'消灭配置',实现零配置. 那么,如何在idea中创建一个spri ...

  9. 哈希表(散列)HashTable实现

    近期刷Leetcode发现凡是找字符串中反复字符或者数组中找反复数据的时候就不知道从何下手了. 所以决定学习一下哈希表解题.哈希表的原理主要是解决分类问题,hash表是介于链表和二叉树之间的一种中间结 ...

  10. 【特征匹配】BRISK原文翻译

    原文:Stefan Leutenegger, Margarita Chli et al.<BRISK: Binary Robust Invariant Scalable Keypoints> ...