QT学习_03_坐标系统和内存回收机制
1 坐标系统
Qt的坐标系统很简单,左上角是原点,x轴是向右递增。Y轴是向下递增。
最外面的那个窗口(主窗口,父窗口),原点是屏幕的左上角。
而在主窗口中添加的子窗口,原点是父窗口的左上角。
mywidget.cpp
#include "mywidget.h"
#include <QPushButton>
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
{
this->resize(800,800);
/* 对于父窗口(主窗口),坐标系统相对于屏幕
* 原点,相对于屏幕左上角
* X:往右递增
* Y:向下递增
*/
this->move(100,100);
/* 子窗口,坐标系统相对于父窗口
* 原点,相对于父窗口空白区域左上角(不包括边框)
* X:往右递增
* Y:向下递增
*/
QPushButton *b1 = new QPushButton(this);
b1->move(200,200);
b1->setText("^_^");
b1->resize(400,400);
// b2是以b1为父窗口,所以它的坐标系统是基于b1的, 原点也是b1的左上角
QPushButton *b2 = new QPushButton(b1);
b2->move(50,50);
b2->setText("@_@");
b2->resize(100,100);
}
myWidget::~myWidget()
{
}
运行结果
2 Qt内存回收机制
上面的例子,我们创建了两个按钮, 都是动态分配的空间。
对于c++而言,如果不释放这个空间就会导致内存泄漏。
画成对象树,就是长这个样子
Qt的内存释放机制就是:
1)指定父对象后、2)直接或间接继承于QObject
子对象如果是动态分配空间的(new),不需要手动释放(delete)
系统会自动释放
比如按钮: QPushButton继承于QAbstractButton继承于QWidget继承于QObject。
也就是说,上面的例子中,b1,b2都是系统自动释放。
这个事情说明,指定父对象非常的关键!
感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。