实例QT程序 —— QTableWidget 表格清空带控件的单元格

本文详细介绍在QTableWidget中清空带控件单元格的四种有效方法,包括使用clearContents、clear、removeCellWidget和setRowCount(0),并探讨各方法是否释放内存空间。附带动态效果展示和完整源码。

目录

1.简介
2.效果图
3.重点讲解
4.源码



1.简介

本文主要介绍了如何在QTableWidget表格中清空带控件的单元格,重点内容包含

  • 清空带控件单元格的多种方式;
  • 各清空方式是否释放控件所占用的内存空间。

本文还有动态效果图、重点讲解和源码,读者们可以方便查看学习和交流。


回目录

2.效果图

清空带控件表格常用方式(clearContents、clear、moveCellWidget)运行效果图1
清空带控件表格常用方式(clearContents、clear、moveCellWidget)运行效果图1
清空带控件表格常用方式(setRowCount(0)直接清空所有行数)运行效果图2

清空带控件表格常用方式(setRowCount(0)直接清空所有行数)运行效果图

回目录

3.重点讲解

1)清空带控件单元格的多种方式

以下4中方式都可以清空带控件的单元格数据,用户根据需求可以选择其中一种方式。

方式1:清空表格所有单元格内容(不包括标题栏信息)

    ui->tableWidget->clear();

方式2:清空表格所有单元格内容(包括标题栏信息)

    ui->tableWidget->clear();

方式3:删除指定单元格中的控件

ui->tableWidget->removeCellWidget(row, col);

方式4:通过设置表格行数目来清空所有单元格

    ui->tableWidget->setRowCount(0);

2)各清空方式是否释放控件所占用的内存空间

通过程序界面中右侧的“过程信息”可以看到各个清空方式都可以释放单元格控件所占用的内存空间(因为在清空单元格控件的析构函数在执行时,触发了信息的打印)。
QTableWidget表格清空内容及控件过程信息截图
QTableWidget表格清空内容及控件过程信息截图


回目录

4.源码

源码下载地址
https://download.csdn.net/download/Redboy_Crazy/12700135

widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE


class CustomBut : public QPushButton
{
    Q_OBJECT
public:
    explicit CustomBut(const QString &name, QWidget *parent = Q_NULLPTR);

    void setCellInfo(int row, int column){
        m_row = row;
        m_column = column;
    }

    ~CustomBut(){
        emit si_delete(m_row, m_column);
        qDebug() << m_row << m_column << "customBut delete";
    }

signals:
    void si_delete(int row, int column);

private:
    int m_row;
    int m_column;
};


class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_btnInitTable_clicked();

    void on_btnClearContent_clicked();

    void on_btnRemoveLines_clicked();

    void sl_delete(int row, int column);

    void on_btnClear_clicked();

    void on_btnRemoveCellWidget_clicked();

    void on_btnClearText_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H




widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_btnInitTable_clicked()
{
    if( ui->tableWidget->rowCount() > 0 ){
        QMessageBox::warning(this, "警告", "请删除所有表格行信息后再初始化!");
        return;
    }

    int nRow = 3;
    int nColumn = 3;
    ui->tableWidget->setRowCount(nRow);
    ui->tableWidget->setColumnCount(nColumn);
//    ui->tableWidget->setHorizontalHeaderLabels();
    for(int row=0; row<nRow; row++){
        for(int col=0; col<nColumn; col++){
            QString strInf = QString("Cell(%1,%2)").arg(row).arg(col);
            CustomBut *btn = new CustomBut(strInf);
            btn->setCellInfo(row, col);
            connect(btn, &CustomBut::si_delete, this, &Widget::sl_delete);
            ui->tableWidget->setCellWidget(row, col, btn);
        }
    }
}

void Widget::on_btnClearContent_clicked()
{
    {
        QString strInf = QString("-- tableWidget.clearContents() --");
        ui->plainTextEdit->appendPlainText(strInf);
    }

    ui->tableWidget->clearContents();
}

void Widget::on_btnRemoveLines_clicked()
{
    {
        QString strInf = QString("-- tableWidget.setRowCount(0) --");
        ui->plainTextEdit->appendPlainText(strInf);
    }

    ui->tableWidget->setRowCount(0);
}

void Widget::on_btnRemoveCellWidget_clicked()
{
    {
        QString strInf = QString("-- tableWidget.removeCellWidget() --");
        ui->plainTextEdit->appendPlainText(strInf);
    }

    int nRow = ui->tableWidget->rowCount();
    int nColumn = ui->tableWidget->columnCount();
    for(int row=0; row<nRow; row++){
        for(int col=0; col<nColumn; col++){
//            QString strInf = QString("Cell(%1,%2)").arg(row).arg(col);
            ui->tableWidget->removeCellWidget(row, col);
        }
    }
}


void Widget::on_btnClear_clicked()
{
    {
        QString strInf = QString("-- tableWidget.clear() --");
        ui->plainTextEdit->appendPlainText(strInf);
    }

    ui->tableWidget->clear();
}

void Widget::sl_delete(int row, int column)
{
    QString strInf = QString("Cell(%1,%2) Widget is deleted").arg(row).arg(column);
    ui->plainTextEdit->appendPlainText(strInf);
}

CustomBut::CustomBut(const QString &name, QWidget *parent)
    : QPushButton(name, parent)
{
}

void Widget::on_btnClearText_clicked()
{
    ui->plainTextEdit->clear();
}



回目录




加油,向未来!GO~
Come on!


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值