QT QTableWidget 调用removeRow、clearContents、clear删除单元格

当widget,通过setCellWidget加入到了  QTableWidget后,调用removeRow、clearContents、clear都会自动调用单元格widge的析构函数,不需要使用者再将单元格取出来delete。

写一个例子

    ui->tableWidget->setColumnCount(4);
    ui->tableWidget->setRowCount(4);
    for(int i = 0 ; i < 4; i++)
    {
        ui->tableWidget->setRowHeight(i,30);
        for(int j = 0; j < 4; j++)
        {
            Form*box = new Form();
            box->setObjectName(QString("%1-%2").arg(i).arg(j));
            ui->tableWidget->setCellWidget(i,j ,box);
        }
    }
    ui->tableWidget->removeRow(0);
#ifndef FORM_H
#define FORM_H
 
#include <QWidget>
#include <QDebug>
 
namespace Ui {
class Form;
}
 
class Form : public QWidget
{
    Q_OBJECT
 
public:
    explicit Form(QWidget *parent = nullptr);
    ~Form();
 
private:
    Ui::Form *ui;
};
 
#endif // FORM_H
 
 
#include "form.h"
#include "ui_form.h"
 
Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
}
 
Form::~Form()
{
    qDebug() << "~Form()" << objectName();
    delete ui;
}
打印结果:

~Form() "0-1"

~Form() "0-2"

~Form() "0-3"

~Form() "0-0"

说明确实会自动调用widget的析构函数,并且析构时候,不是按照列的顺序,是随机的。

PS:调用clear和clearContents不会删除QTableWidget每一行的容器,如果需要清空那么需要和removeRow配合使用

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用`QTableWidget`的`rowSpan()`方法来获取指定单元格的行合并数。如果当前单元格不是一个被合并的单元格,`rowSpan()`方法将返回1。 对于所在行右边的单元格,你可以使用`QTableWidget`的`item(row, column)`方法来获取指定行列的单元格,然后再使用`rowSpan()`方法来判断该单元格是否是一个合并单元格。如果该单元格是一个合并单元格,它的行合并数将大于1。你可以尝试使用下面的代码来获取所在行右边单元格的行合并数: ```cpp int row = 0; // 指定行号 int col = 0; // 指定列号 QTableWidgetItem* item = tableWidget->item(row, col); // 获取指定单元格 int rowSpan = tableWidget->rowSpan(row, col); // 获取指定单元格的行合并数 if (rowSpan > 1) { // 如果该单元格是合并单元格 for (int i = 1; i < rowSpan; i++) { // 遍历该单元格所在行的所有合并单元格 QTableWidgetItem* nextItem = tableWidget->item(row + i, col); // 获取下一个合并单元格 if (nextItem == nullptr) continue; int nextRowSpan = tableWidget->rowSpan(row + i, col); // 获取下一个合并单元格的行合并数 if (nextRowSpan > 1) { // 如果下一个合并单元格也是合并单元格 rowSpan += (nextRowSpan - 1); // 将下一个合并单元格的行合并数加入当前单元格的行合并数 } } } ``` 这个代码片段会首先获取指定行列的单元格,然后获取该单元格的行合并数。如果该单元格是一个合并单元格,它会遍历该单元格所在行的所有单元格,查找是否有其他合并单元格。如果找到了其他合并单元格,将它们的行合并数加入到当前单元格的行合并数中。最后,你可以通过判断`rowSpan`的值是否大于1来判断所在行右边的单元格是否是一个合并单元格

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值