在QComboBox的基础上实现复选功能
这个是最近的一个项目上需要实现的功能。要求如下:
- 下拉列表的项目可以多选
- 显示框不能编辑
- 所选中的项目在显示框中出现
下面根据网上的提示代码(参照博客 一去二三里),主要实现如下代码(与参照略有不同):
实现方案:
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的基础上实现复选功能的更多相关文章
- QComboBox实现复选功能
需求: 下拉列表有复选功能 不可编辑 显示所有选中项 关于QComboBox的复选功能有几种方案: QStandardItemModel + QStandardItem QListWidget + ...
- QComboBox实现复选功能(三种方法:嵌套QListWidget, 设置QStandardItemModel, 设置Delegate)
今天介绍一下一个小东西 — 如何让QComboBox实现复选功能? 需求: 下拉列表有复选功能 不可编辑 显示所有选中项 关于QComboBox的复选功能有几种方案: QStandardIte ...
- QT 创建一个具有复选功能的下拉列表控件
最近研究了好多东西,前两天突然想做一个具有复选功能的下拉列表框.然后在网上"学习"了很久之后,终于发现了一个可以用的,特地发出来记录一下. 一.第一步肯定是先创建一个PROJECT ...
- Flex 扩展combobox 实现复选功能
前段时间,老大召唤,给个任务,研究一下flex的combobox控件 实现复选功能(flex自带的combobox控件不可以复选),小兵能力有限,哪里可以扩展呀,网上看了别人写的,发现总是有点瑕疵(关 ...
- duilib 修复CTreeViewUI复选功能判断不准确的bug
转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42265209 CTreeViewUI里面自带了复选的功能,但是复选功能存在 ...
- [Selenium With C#基础教程] Lesson-07 复选框
作者:Surpassme 来源:http://www.jianshu.com/p/98ede43da3c3 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. [作者:Surp ...
- Jquery通过AJAX从后台获取数据显示在表格上(复选)
代码: function GetMultiLineSelectTable(tableId, selectIds) { var table = $(tableId); var url = table.d ...
- (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。 附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录 (Map)在原有世界杯Map 的基础上,增加如下功能: 读入一支球队的名字,输出该球队夺冠的年份列表。 例如,读入“巴西”,应当输出 1958 1962 1970 1
package homework001; import java.util.HashMap; import java.util.Scanner; public class Map { public s ...
- 为DataGridView控件实现复选功能
实现效果: 知识运用: DataGridViewCheckBoxColumn类 实现代码: private class Fruit { public int Price { get; set; } p ...
随机推荐
- 【转】npm包管理器那些事
原文链接:http://www.cnblogs.com/shuoer/p/7782125.html npm包管理器那些事! 今天和朋友针对npm包全局安装和本地项目安装这个梗展开的激烈的讨论,故此做一 ...
- 模块化编程node
众所周知,Node.js 的出现造就了全栈工程师,因为它让 JavaScript 的舞台从浏览器扩大到了服务端 而 Node.js 的强大也得益于它庞大的模块库,所以学习 Node.js 第一步还得从 ...
- Java学习之计算机基础(二)
今天主要介绍原码.反码与补码的知识.了解原码.反码与补码的知识,可以帮助我们更好地理解在计算机内部是如何进行运算的,同时对于后面更好地学习和理解Java基本数据类型及其范围打下基础. 背景知识: 在计 ...
- 从setTimeout看js函数执行
老实说,写这篇文章的时候心里是有点压抑的,因为受到打击了,为什么?就 因为喜欢折腾不小心看到了这个"简单"的函数: for (var i = 0; i < 5; ...
- AspNet Core Api Restful 实现微服务之旅 (一)
(一)了解微服务(二)搭建VS项目框架 (三)创建AspNet Core Api VS2017 安装包 链接:https://pan.baidu.com/s/1hsjGuJq 密码:ug59 创 ...
- google开源服务器apprtc的搭建
本文参考网帖: http://www.jianshu.com/p/c55ecf5a3fcf http://io.diveinedu.com/2015/02/05/%E7%AC%AC%E5%85%AD% ...
- openstack-glance API 镜像管理的部分实现和样例
感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限.错误之处在所难免.欢迎指正. 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
- string的内存管理问题
string的内存管理是通过仅仅增不减的方式进行的,string的clear方法不会真正的释放内存,假设须要真正的释放内存可以连续调用string的这两个方法.resize(0),reserve(). ...
- Linux网络编程--wireshark分析TCP包头的格式
摘要: 本文简介了TCP面向连接理论知识,具体讲述了TCP报文各个字段含义.并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述 TCP是面向连接的可靠传输 ...
- Hibernate的load()和get()区别
最近在用Hibernate的时候发现一个问题:比如我们从数据库获得一个对象时,使用session.get()方法还是session.load()? 两种方法在获得一个实体对象时是有区别的,在查询性能 ...