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

  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. Java IO(2)阻塞式输入输出(BIO)的字节流与字符流

    在上文中<Java IO(1)基础知识——字节与字符>了解到了什么是字节和字符,主要是为了对Java IO中有关字节流和字符流有一个更好的了解. 本文所述的输出输出指的是Java中传统的I ...

  2. Idea Live Templates代码模板

    一. 概念 创建代码模板进行快速代码编写,如sout-->System.out.println();. 如我们经常要写logger的定义:private static final Logger ...

  3. MongoDb安装--yum安装

    本帖最后由 草包 于 2017-5-2 09:57 编辑 [Shell] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 ...

  4. keepalived结合nginx实现nginx高可用

    1.简介 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障.一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台 ...

  5. C#复习资料

    C#期末考试复习题 一.单项选择题(每小题2分,共20分) 1.在类作用域中能够通过直接使用该类的(   )成员名进行访问. A. 私有      B. 公用      C. 保护      D. 任 ...

  6. 基于ASP.MVC票据FormsAuthenticationTicket身份认证

    做一个最基础的业务需求用户登录,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端.服务端上的授权设置就可以根据不同目录对不同用户的访 ...

  7. js、jquery实现模糊搜索功能

    模糊搜索功能在工作中应用广泛,并且很实用,自己写了一个方法,以后用到的时候可以直接拿来用了! 实现的搜索功能: 1. 可以匹配输入的字符串找出列表中匹配的项,列表框的高度跟随搜索出的列表项的多少改变 ...

  8. JMeter脚本java代码String数组要写成String[] args,不能写成String args[],否则报错。

    JMeter脚本java代码String数组中括号要写在类型关键字后面,不能写在变量名后面.

  9. 【Jenkins】通过ANT构建JMeter任务时提示找不到jtl文件时的解决方法

  10. Spring框架(三) JDBCTemplate,声明式事务,自动装载(注解)

    JDBCTemplate 按照标准正常项目的结构 结构图: model层 dao层 实现  dao:(DateBase Access Object) 数据访问对象,dao层只用来访问数据库和模型层 s ...