QComboBox实现多选全选功能

本文介绍了如何在Qt中创建一个多选下拉复选框(MultiSelectComboBox),并实现全选功能,包括自定义QCheckBox组件、信号槽连接以及单选与全选状态管理。通过实例代码和步骤,帮助开发者避免使用表格的繁琐,提升下拉选择体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考原文链接: 

Qt 下拉复选框(MultiSelectComboBox)(一) 实现下拉框多选,搜索下拉框内容_梦醒梦起的博客-优快云博客_qt复选框刚开始学习qt时,在遇到下拉复选框问题的时候总是使用表格来实现这个功能,因为表格单元格可以添加代理,而QComboBox类对象在设置代理后总是不生效。使用表格来实现,如果需求本来就是在表格中还好,但有时候只是需要一个下拉复选框,这个时候就需要隐藏边框,设置单元双击输入框禁用等等,会非常麻烦,而且最后的效果也是不敬人意https://blog.youkuaiyun.com/qq_43793182/article/details/122080407

效果:

在原文链接的基础上补充的代码如下:

<全选功能>

//全选
MultiSelectComboBox.h
QCheckBox* checkAll;

MultiSelectComboBox.cpp

MultiSelectComboBox::MultiSelectComboBox(QWidget *parent)
    : QComboBox {parent}
{
//设置全选框
    checkAll=new QCheckBox();
    QListWidgetItem* currentItem = new QListWidgetItem(list_widget_);
    checkAll->setText("全选");

    list_widget_->addItem(currentItem);
    list_widget_->setItemWidget(currentItem, checkAll);
//全选 信号和槽
   connect(checkAll, &QCheckBox::released, [=]() mutable {
        bool ischecked = checkAll->isChecked();
        for (int i = 0; i < list_widget_->count(); i++) {
QCheckBox *check_box = 
static_cast<QCheckBox *>(list_widget_->itemWidget(list_widget_->item(i)));
        check_box->setChecked(ischecked);
        }
    });
}
//单项与全选状态
void MultiSelectComboBox::checkAllState(int state)
{
 if (Qt::Unchecked == state)
    {
       checkAll->setChecked(false);
    }
    else if (Qt::Checked == state)
    {
        bool isallcheck = true;
        for (int i = 1; i < list_widget_->count(); i++)
        {
            QCheckBox *check_box = static_cast<QCheckBox*>(list_widget_->itemWidget(list_widget_->item(i)));
            if(check_box->isChecked() == false)
            {
                isallcheck = false;
            }
            }
       checkAll->setChecked(isallcheck);
    }
}
//在创造出下拉框checkbox处连接单项与全选状态的信号和槽
void MultiSelectComboBox::addItem(const QString &_text, const QVariant &_variant /*= QVariant()*/)
{
    Q_UNUSED(_variant);
    QListWidgetItem *item     = new QListWidgetItem(list_widget_);
    QCheckBox       *checkbox = new QCheckBox(this);
    checkbox->setText(_text);
    list_widget_->addItem(item);
    list_widget_->setItemWidget(item, checkbox);
    connect(checkbox, &QCheckBox::stateChanged, this, &MultiSelectComboBox::stateChange);
//单项与全选状态的信号和槽
    connect(checkbox,&QCheckBox::stateChanged,this,&MultiSelectComboBox::checkAllState);
}

使用:

1.将QComboBox控件提升为该MultiSelectComboBox类

 

 2.在QComboBox中加入QcheckbBox

参考原博主写好的函数直接用就可以了

资源: 

https://download.youkuaiyun.com/download/FWY0x7CF/86790816

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值