QComboBox实现复选功能
- 下拉列表有复选功能
- 不可编辑
- 显示所有选中项
- QStandardItemModel + QStandardItem
- QListWidget + QListWidgetItem
- Model/View + QItemDelegate
- pListWidget = new QListWidget(this);
- pLineEdit = new QLineEdit(this);
- for (int i = 0; i < 5; ++i)
- {
- QListWidgetItem *pItem = new QListWidgetItem(pListWidget);
- pListWidget->addItem(pItem);
- pItem->setData(Qt::UserRole, i);
- QCheckBox *pCheckBox = new QCheckBox(this);
- pCheckBox->setText(QStringLiteral("Qter%1").arg(i));
- pListWidget->addItem(pItem);
- pListWidget->setItemWidget(pItem, pCheckBox);
- connect(pCheckBox, SIGNAL(stateChanged(int)), this, SLOT(stateChanged(int)));
- }
- ui.comboBox->setModel(pListWidget->model());
- ui.comboBox->setView(pListWidget);
- ui.comboBox->setLineEdit(pLineEdit);
- pLineEdit->setReadOnly(true); //ui.comboBox->setEditable(true);
- connect(pLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(textChanged(const QString &)));
- void MultiComboBox::stateChanged(int state)
- {
- bSelected = true;
- QString strSelectedData("");
- strSelectedText.clear();
- QObject *object = QObject::sender();
- QCheckBox *pSenderCheckBox = static_cast(object);
- int nCount = pListWidget->count();
- for (int i = 0; i < nCount; ++i)
- {
- QListWidgetItem *pItem = pListWidget->item(i);
- QWidget *pWidget = pListWidget->itemWidget(pItem);
- QCheckBox *pCheckBox = (QCheckBox *)pWidget;
- if (pCheckBox->isChecked())
- {
- QString strText = pCheckBox->text();
- strSelectedData.append(strText).append(";");
- }
- //所点击的复选框
- if (pSenderCheckBox == pCheckBox)
- {
- int nData = pItem->data(Qt::UserRole).toInt();
- qDebug() << QString("I am sender...id : %1").arg(nData);
- }
- }
- if (strSelectedData.endsWith(";"))
- strSelectedData.remove(strSelectedData.count() - 1, 1);
- if (!strSelectedData.isEmpty())
- {
- //ui.comboBox->setEditText(strSelectedData);
- strSelectedText = strSelectedData;
- pLineEdit->setText(strSelectedData);
- pLineEdit->setToolTip(strSelectedData);
- }
- else
- {
- pLineEdit->clear();
- //ui.comboBox->setEditText("");
- }
- bSelected = false;
- }
- void MultiComboBox::textChanged(const QString &text)
- {
- if (!bSelected)
- pLineEdit->setText(strSelectedText);
- }

QComboBox实现复选功能的更多相关文章
- 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里面自带了复选的功能,但是复选功能存在 ...
- 在QComboBox的基础上实现复选功能
这个是最近的一个项目上需要实现的功能.要求如下: 下拉列表的项目可以多选 显示框不能编辑 所选中的项目在显示框中出现 下面根据网上的提示代码(参照博客 一去二三里),主要实现如下代码(与参照略有不同) ...
- 为DataGridView控件实现复选功能
实现效果: 知识运用: DataGridViewCheckBoxColumn类 实现代码: private class Fruit { public int Price { get; set; } p ...
- 个人永久性免费-Excel催化剂功能第58波-批量生成单选复选框
插件的最大威力莫过于可以把简单重复的事情批量完全,对日常数据采集或打印报表排版过程中,弄个单选.复选框和用户交互,美观的同时,也能保证到数据采集的准确性,一般来说用原生的方式插入单选.复选框,操作繁琐 ...
- 自定义实现 PyQt5 下拉复选框 ComboCheckBox
一.前言 由于最近的项目需要具有复选功能,但过多的复选框会影响界面布局和美观,因而想到把 PyQt5 的下拉列表和复选框结合起来,但在 PyQt5 中并没有这样的组件供我们使用,所以想要自己实现一个下 ...
- Qt之QTableView添加复选框(QAbstractTableModel)
简述 使用QTableView,经常会遇到复选框,要实现一个好的复选框,除了常规的功能外,还应注意以下几点: 三态:不选/半选/全选 自定义风格(样式) 下面我们介绍一下常见的实现方式: 编辑委托. ...
随机推荐
- 图论(Tarjan缩点):BZOJ 1194: [HNOI2006]潘多拉的盒子
1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 344 Solved: 181[Submit][Stat ...
- ISAP 模板
#include <iostream> #include <cstring> #include <cstdio> #include <queue> us ...
- expresscalculate
//本程序接受任意含有+.-.*./和()的数值表达式,数值允许带小数,输入以#结束.如:((2.4+3.5)*2-(2+3.5)/2)*(2+3)# #include <stdio.h> ...
- 配置openStack使用spice
注:因为在测试配置过程中反复配置过多次,以下内容可能并不完整,有待验证. 按官方文档(openstack-install-guide-yum-juno)搭建和配置的OpenStack默认使用novnc ...
- sql第一课笔记
这是我看了imooc的视频教程之后重新写的笔记. 虽然之前也是学习过SQL Server数据库,但是也是忘记得差不多了.现在重新捡起来,安装一次数据库练习,使用的是mysql. 第一课是最简单的创建, ...
- Java 判断一段网络资源是否存在
package cn.ycmedia.common.utils; import java.io.InputStream; import java.net.URL; import java.net.UR ...
- 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例
本文从功能需求的角度分析一般蓝牙BLE单芯片的应用框架(SDK Framework)的接口设计过程,并以TI CC2541为例说明BLE的应用开发方法. 一.应用框架(Framework) 我们熟知的 ...
- java 数据库两种连接方法
package jdbc; import java.sql.*; public class ConnectionDemo2 { public static final String DBDRIVER= ...
- U盘启动安装CentOS 6.3
无光驱U盘启动安装CentOS 6.3的一些必要条件: 1.主板要支持U盘启动 2.8G的U盘 3.UltraISO软件 http://www.linuxidc.com/Linux/2010-03/2 ...
- [转] Java中的访问控制
可见/访问性 在同一类中 同一包中 不同包中 同一包子类中 不同包子类中 public yes yes yes yes yes protected yes yes no ...