文章目录4. 对外接口定义5. 代码实现 总结
本系列目录
Qt 下拉复选框()(一) 实现下拉框多选,搜索下拉框内容
Qt 下拉复选框()(二) 样式表设置
Qt 下拉复选框()(三) 不能输入中文等问题修复
前言
刚开始学习qt时,在遇到下拉复选框问题的时候总是使用表格来实现这个功能,因为表格单元格可以添加代理,而类对象在设置代理后总是不生效 。使用表格来实现,如果需求本来就是在表格中还好,但有时候只是需要一个下拉复选框,这个时候就需要隐藏边框,设置单元双击输入框禁用等等,会非常麻烦,而且最后的效果也是不敬人意,所以在仔细研究了类对象之后,参考大佬的示例实现了一个比较好用的下拉复选框 。
参考博客地址:
以下是本篇文章正文内容,主要实现功能,下面案例可供参考
一、的组成
类对象由三部分组成:、、 。
二、实现 1. 总体实现
整个控件继承于类 。主要修改、这两部分,提供如下接口,可以将这两部分设置为新建的、对象 ( ,) 。
代码如下(示例):
this->setView(list_widget_);this->setLineEdit(line_edit_);
2. 部分
这部分用来显示选择的结果和弹出下拉框,显示内容使用 “;” 进行分割 。这里设置了点击也可以弹出下拉框,需要先将当前对象安装(或注册)为事件过滤器,再重写()函数 。
代码如下(示例):
/*设置文本框*///设为只读,因为该输入框只用来显示选中的选项,称为文本框更合适些line_edit_->setReadOnly(true);//把当前对象安装(或注册)为事件过滤器,当前也称为过滤器对象 。事件过滤器通常在构造函数中进行注册 。line_edit_->installEventFilter(this);//设置禁用样式,因为不受样式表控制,临时这样解决line_edit_->setStyleSheet("QLineEdit:disabled{background:rgb(233,233,233);}");bool MultiSelectComboBox::eventFilter(QObject *watched, QEvent *event){//设置点击输入框也可以弹出下拉框if (watched == line_edit_ && event->type() == QEvent::MouseButtonRelease && this->isEnabled()){showPopup();return true;}return false;}
3. 部分
下拉框部分,显示搜索框与选项 。
1. 搜索框部分
设置第一项的为,用来输入检索条件,绑定(const &)信号,当输入内容发生变化时,下面显示选项发生相应变化 。
初始化代码如下(示例):
/*设置搜索框*/QListWidgetItem* currentItem = new QListWidgetItem(list_widget_);//设置搜索框提示信息search_bar_->setPlaceholderText("Search.........");//显示清除按钮search_bar_->setClearButtonEnabled(true);list_widget_->addItem(currentItem);list_widget_->setItemWidget(currentItem, search_bar_);
输入文本变化槽函数代码如下(示例):
connect(search_bar_, SIGNAL(textChanged(const QString&)), this, SLOT(onSearch(const QString&)));
void MultiSelectComboBox::onSearch(const QString& _text){for (int i = 1; i < list_widget_->count(); i++){QCheckBox *check_box = static_cast
2. 选项部分
单击选项选中,选中后更新内容,绑定信号,鼠标单击选项时时,就会将所有选项遍历一遍,然后把选中的选项组织为字符串,更新到上 。发送信号void (const_data);,此信号为选中选项发送变化时发出 。
- 转发有福利哦 Python实战 | 爬取北京海淀区一居室租房信息
- 全球“最稀有”职业,仅仅只有6名职工,李白是其中之一 世界吉尼斯记录裁判
- 奇葩的吉尼斯世界纪录:最后一项要两人完成,你的好兄弟敢尝试吗 变味的吉尼斯记录
- 大话西游2:现在的一线超敏魔是否能到4100速度? 4100吉尼斯记录
- 中国重汽再赢2023上半年重卡销量双冠王稳居行业第一 重汽吉尼斯记录
- 弹弓苹果周启明:山西弹弓远距离精准速射走上舞台第一人 弹弓速射吉尼斯记录
- 一大早的被乐高复刻的泰姬陵刷屏,各位LEGO粉还好吗 泰姬陵积木吉尼斯记录
- 小说:穿越特种兵世界,废材小伙靠系统变强,一跃成为最强兵王 特种兵世界之最强垃圾工
- 魔环入口
- 肇兴侗寨一一中国最美丽的六大乡村古镇之一 世界之最原生态的肇兴侗寨