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版权协议,转载请附上原文出处链接和本声明。