QT笔记——QListwidget添加复选框

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 
#include 
#include 
#include 
#include 
#include 
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);
        }
    }
}

运行结果:
QT笔记——QListwidget添加复选框_第1张图片
参考博客:
https://blog.csdn.net/qq_31073871/article/details/90272780

你可能感兴趣的:(QT,qt)