1.了解ListWidget的函数
setItemWidget(); //添加自定义控件
takeItem(row); //删除项
setSizeHint(QSize()); //设置item的高度
2.了解checkbox函数
stateChanged(int); //checkbox状态改变时发出信号
实现功能:
1.在listwidget中初始化添加复选框checkbox
2.在listwidget中在原来基础上添加复选框checkbox
3.在listwidget中 当checkbox选中时 才可以删除
#ifndef CHECKBOXTEST_H
#define CHECKBOXTEST_H
#include <QWidget>
#include <QCheckBox>
#include <QListWidget>
#include <QListWidgetItem>
#include <QDebug>
#include <QSize>
namespace Ui {
class checkboxtest;
}
class checkboxtest : public QWidget
{
Q_OBJECT
public:
explicit checkboxtest(QWidget *parent = nullptr);
~checkboxtest();
void initCheckBox();
private slots:
void checkboxStateChanged(int);
void on_addBtn_clicked();
void on_delBtn_clicked();
private:
Ui::checkboxtest *ui;
QListWidget *listwidget;
QStringList itemList;
};
#endif // CHECKBOXTEST_H
#include "checkboxtest.h"
#include "ui_checkboxtest.h"
checkboxtest::checkboxtest(QWidget *parent) :
QWidget(parent),
ui(new Ui::checkboxtest)
{
ui->setupUi(this);
initCheckBox();
}
checkboxtest::~checkboxtest()
{
delete ui;
}
void checkboxtest::initCheckBox()
{
listwidget = new QListWidget(this);
for(int i = 0; i < 10; i++ )
{
QListWidgetItem *item = new QListWidgetItem(listwidget);
QCheckBox * checkbox = new QCheckBox;
checkbox->setText(QString("%1").arg(i));
//设置item的高度
item->setSizeHint(QSize(0,20));
listwidget->addItem(item);
listwidget->setItemWidget(item, checkbox);
//遍历每个checkbox
connect(checkbox,SIGNAL(stateChanged(int)),this,SLOT(checkboxStateChanged(int)));
}
}
void checkboxtest::checkboxStateChanged(int)
{
QStringList itemList;
//遍历当前的listwidget
for(int i = 0; i < listwidget->count(); i++)
{
QListWidgetItem *item = listwidget->item(i);
//将QWidget 转化为QCheckBox 获取第i个item 的控件
QCheckBox *checkbox = static_cast<QCheckBox *>(listwidget->itemWidget(item));
if(checkbox->isChecked())
{
QString checkboxStr = checkbox->text();
itemList.append(checkboxStr);
}
}
qDebug()<<itemList;
}
void checkboxtest::on_addBtn_clicked()
{
//获取当前的行数
int row = listwidget->count();
QListWidgetItem *item = new QListWidgetItem(listwidget);
//在当前行添加item checkbox
QCheckBox *checkbox = new QCheckBox;
checkbox->setText(QString("add%1").arg(row));
listwidget->addItem(item);
listwidget->setItemWidget(item,checkbox);
connect(checkbox,SIGNAL(stateChanged(int)),this,SLOT(checkboxStateChanged(int)));
}
void checkboxtest::on_delBtn_clicked()
{
//获取当前选中行
int row = listwidget->currentRow();
if(row < 0)
{
return ;
}
for(int i = 0; i < listwidget->count(); i++)
{
QListWidgetItem *item = listwidget->item(i);
//将QWidget 转化为QCheckBox 获取第i个item 的控件
QCheckBox *checkbox = static_cast<QCheckBox *>(listwidget->itemWidget(item));
if(checkbox->isChecked())
{
listwidget->takeItem(row);
}
}
}
运行结果:
参考博客:
https://blog.csdn.net/qq_31073871/article/details/90272780
版权声明:本文为lion_cxq原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。