QT 控件内存管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT 控件内存管理相关的知识,希望对你有一定的参考价值。

参考技术A 一、Qt的半自动化的内存管理

(1)QObject及其派生类的对象,如果其parent非0,那么其parent析构时会析构该对象。

(2)QWidget及其派生类的对象,可以设置 Qt::WA_DeleteOnClose 标志位(当close时会析构该对象)。

(3)QAbstractAnimation派生类的对象,可以设置 QAbstractAnimation::DeleteWhenStopped。

(4)QRunnable::setAutoDelete()、MediaSource::setAutoDelete()。

(5)父子关系:父对象、子对象、父子关系。这是Qt中所特有的,与类的继承关系无关,传递参数是与parent有关(基类、派生类,或父类、子类,这是对于派生体系来说的,与parent无关)。

//参考 https://blog.csdn.net/qq_42100881/article/details/80447441

二、布局、tabwiget 、tablewidget 、tableView  treeview treeWidget添加控件需要自己手动释放不

1、布局 

mywidget* pp = new mywidget;

ui->verticalLayout->addWidget(pp);//verticalLayout 为主窗口 ui中的布局

测试:关闭主窗口, mywidget 的析构函数会自动进入

2、tabwiget 

mywidget* pTest = new mywidget; //其中没有设置setAttribute(Qt::WA_DeleteOnClose);

 ui->tabWidget->addTab(pTest, "test");

测试:关闭主窗口, mywidget 的析构函数会自动进入  

3、tablewidget

ui->tableWidget->setRowCount(2); //设置行数为2

ui->tableWidget->setColumnCount(2); //设置列数为5

myQComboBox* combox = new myQComboBox;//myQComboBox自己继承QComboBox的 没有指定父亲,

ui->tableWidget->setCellWidget(0,0,combox);

测试:关闭主窗口, myQComboBox 的析构函数会自动进入  

4、tableView

qt 布局管理按钮控件间有空隙?

定义了几个按钮控件,想要按钮间没有空隙,我使用setspaces(0)来设置它们之间的间隔。

结果控件间还是有空隙,如图

我对控件所在的widget的背景进行设置,(会把style传到子控件)发现结果如图

对按钮控件的背景进行设置,结果如图

所以把按钮控件的背景重新设置一下就ok了。

 

以上是关于QT 控件内存管理的主要内容,如果未能解决你的问题,请参考以下文章

Qt的内存管理

Qt 半内存管理

Qt 内存管理机制

某些 Qt 函数/构造函数的参数的内存管理?

关于QT的系统总结

在 Qt5.3(mingw32) 中删除 QQuickView 的内存管理问题