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 控件内存管理的主要内容,如果未能解决你的问题,请参考以下文章