当widget,通过setCellWidget加入到了 QTableWidget后,
关于QTableWidget调用
removeRow、clearContents、clear
都会自动调用widge的析构函数。
写一个例子
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的析构函数,并且析构时候,不是按照列的顺序,是随机的。