> 文章列表 > 对象树、QT的坐标系、信号和槽机制

对象树、QT的坐标系、信号和槽机制

对象树、QT的坐标系、信号和槽机制

1、QT中什么是对象

在创建 QObject 对象时,可以提供一个其父对象,我们创建 的这个 QObject 对象会自动
添加到其父对象的 children()列表。

当父对象析构的时候,这个列表中的所有对象也会 被析构。(注意,这 里的父对象并不是继承意义上的父类!)
QWidget 继承自 QObject,因此也继承了这种对象树关系。一个孩子自 动地成为父组件
的一个子组件
我们也可以自己删除子对象,它们会自动从其父对象列表中删除
综上所述:所有的控件 尽量在 堆区创建

2、QT的坐标系

以左上角为原点(0,0),X 向右增加,Y 向下增加

3、信号和槽机制

3.1、信号槽的理解

 

3.2、信号槽的工作原理

某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播(谁都能听到或者看到,比如项羽摔杯的发出的响声和动作)。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(lot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。

3.3、信号槽的使用

信号槽有系统自定义的,但是系统自定义的只能解决 80 % 的问题,剩下的 20 % 需要我们自己定义

3.3.1、系统的信号和槽

3.3.1.1、查找系统的信号(找不到就自定义)

  

3.3.1.2、查找系统的槽(找不到就自定义)

由于当前的 窗口 是 Widget,所以 btn 被按下发出信号,Widget 响应,做出关闭动作,所以去 Widget 中查找 关闭窗口函数

 
3.3.1.3、使用按钮关闭当前主窗口

#include "widget.h"
#include <QPushButton>
Widget::Widget(QWidget *parent): QWidget(parent)
{//设置主窗口大小this->resize(400,300);//创建一个按钮QPushButton *btn = new QPushButton("关闭", this);
#if 0    //通过 0 和 1来控制使用 QT5 还是 QT4// 建立信号和槽的关系(Qt5的方式),向下兼容,QT5兼容QT4,拿到&QPushButton::clicked的入口地址// 拿到&Widget::close的入口地址connect( btn, &QPushButton::clicked  ,this, &Widget::close );
#else// 建立信号和槽的关系(Qt4的方式) SIGNAL将()里面当成字符串看待 不会判断信号是否存在// 所以 QT4 是最稳妥的方式,QT5 能兼容connect( btn, SIGNAL(clicked())  ,this, SLOT(close()) );
#endif
}Widget::~Widget()
{}

 


 

广东高尔夫网