QComboBox实现复选框功能
来源:互联网 发布:java迭代器中数组赋值 编辑:程序博客网 时间:2024/06/05 11:13
需求:
下拉列表有复选功能
不可编辑
显示所有选中项
关于QComboBox的复选功能有几种方案:
QStandardItemModel + QStandardItem
QListWidget + QListWidgetItem
Model/View + QItemDelegate
当然,还有其它更好的方式,这里就不再过多介绍了,下面介绍一种比较简单的:
QListWidget + QListWidgetItem + QCheckBox
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);}
当点击的复选框状态改变时候,会发送stateChanged信号,槽中通过sender来获取信号的发送者,然后可以获取所需要的数据(比如:可以通过setData保存一些自定义的数据),遍历所有的复选框,获取选中项的数据进行显示。
中间遇到一个小问题,当点击空白处,下来列表会进行收回,此时QLineEdit的数据将会被自动清空,所以此处判断QLineEdit的textChanged来进行恢复。
效果:
作者:╰☆奋斗ing❤孩子` 原文:http://blog.sina.com.cn/s/blog_a6fb6cc90102uw3d.html。
阅读全文
0 0
- QComboBox实现复选框功能
- QComboBox实现复选功能
- Qt 中 QComboBox 嵌入复选框
- QComboBox下拉列表添加复选框及消息处理
- QComboBox下拉列表添加复选框及消息处理
- QComboBox下拉列表添加复选框及消息处理 .
- javascript实现复选框的全选功能
- javascript实现复选框的全选功能
- jsp:选中复选框实现删除功能
- 实现复选框选择的功能
- jQuery实现复选框全选功能
- 【ztree系列】完美实现复选框功能
- javascript实现复选框全选功能
- angluarjs 复选框实现多选功能
- 实现复选框的反选功能
- js javascript 实现复选框全选功能 删除复选框选中项功能
- qt QComboBox 自动查找匹配项功能实现
- javascript实现复选框实现单选按钮功能
- 新华三这艘大船立志两年内领航中国安全市场
- typeof,instanceof,Object.prototype.toString来判断数据类型
- 强化学习——值函数与Bellman方程
- leetcode 591. Tag Validator 解析HTML + 正则表达式
- Echarts图标使用实例(柱状图与饼图)
- QComboBox实现复选框功能
- APP冷启动短暂白屏,附加Image全屏显示
- synchronized和ReentrantLock区别浅析
- 越来越多的黑客偏爱电子邮件网络钓鱼攻击
- 【c#】.NET中验证处理
- vue 禁止浏览器后退
- ArcGIS 10.2中栅格缺失值处理--Nodata in raster
- Python——时间与时间戳之间的转换
- Enumeration