目录
1.简介
本文主要介绍了如何在QTableWidget表格中清空带控件的单元格,重点内容包含
- 清空带控件单元格的多种方式;
- 各清空方式是否释放控件所占用的内存空间。
本文还有动态效果图、重点讲解和源码,读者们可以方便查看学习和交流。
回目录
2.效果图

清空带控件表格常用方式(clearContents、clear、moveCellWidget)运行效果图1

清空带控件表格常用方式(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表格清空内容及控件过程信息截图
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!
本文详细介绍在QTableWidget中清空带控件单元格的四种有效方法,包括使用clearContents、clear、removeCellWidget和setRowCount(0),并探讨各方法是否释放内存空间。附带动态效果展示和完整源码。
831

被折叠的 条评论
为什么被折叠?



