QListWidget添加QCeckBox项及全选的实现

QListWidget添加QCheckBox项及全选的实现
效果:
在这里插入图片描述

一、QListWidget添加QCheckBox项

 QListWidgetItem *bookitem_1 = new QListWidgetItem(ui.book_list);
 QCheckBox *book_1 = new QCheckBox(tr("语文")); ui.book_list->addItem(bookitem_1);
 ui.book_list->setItemWidget(bookitem_1 , book_1);

二、添加全选

 QListWidgetItem *checkallitem = new QListWidgetItem(ui.book_list);
 QCheckBox *checkall = new QCheckBox(tr("全选"));
 ui.book_list->addItem(checkallitem);
 ui.book_list->setItemWidget(checkallitem , checkall);
``

三、全选与取消全选

       connect(checkall, &QCheckBox::released,
                [=]() mutable
            {
                bool ischecked = checkall->isChecked();
                for (size_t i = 0; i < ui.book_list->count(); i++)
                {
                    QListWidgetItem *item = ui.book_list->item(i);
                    QWidget *widget = ui.book_list->itemWidget(item);
                    QCheckBox *box = (QCheckBox*)widget;
                    box->setChecked(ischecked);
                }
            }
            );

``四、单项选择与全选项的选择状态设置

对于每一项的CheckBox设置
信号与槽

 connect(box, SIGNAL(stateChanged(int)), this, SLOT(on_StateChanged(int)));

on_StateChanged(int)槽函数

//ui.book_list[0]是全选项  
 if (Qt::Unchecked == state)
    {
        //取消任意一项,则取消全选项
        QListWidgetItem *item = ui.book_list->item(0);
        QWidget *widget =ui.book_list->itemWidget(item);
        QCheckBox *box = (QCheckBox*)widget;
        box->setChecked(false);
    }
    else if (Qt::Checked == state)
    {
        //选择所有项,全选项自动勾选。
        bool isallcheck = true;
        for (int i = 1; i < ui.book_list->count(); i++)
        {
            QListWidgetItem *item = ui.book_list->item(i);
            QWidget *widget = ui.book_list->itemWidget(item);
            QCheckBox *box = (QCheckBox*)widget;
            if (box->isChecked() == false)
            {
                isallcheck = false;
            }
        }
        QListWidgetItem *item = ui.book_list->item(0);
        QWidget *widget = ui.book_list->itemWidget(item);
        QCheckBox *box = (QCheckBox*)widget;
        box->setChecked(isallcheck);
    }

版权声明:本文为jiangyi091原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。