QT:QObject和组合模式;QApplication、事件循环和观察者模式

组合模式:通过将部分-整体的层次结构表示成树状结构,以便于用简单(组件)部分来创建复杂(复合)的(对象)系统。

	复合对象是包含可以包含子对象的类。
	组件对象是可以拥有一个父对象的类。
	例:学校(复合对象)----很多学院(既是复合对象也是组件对象)---学院又分系(既是复合对象也是组件对象)-----最后到个体学生、教师(组件对象)。

QObject:QT重要基类,如QEvent,QWidget…

	任何QObject的派生类对象都可看做一个QObject对象,他可以有一个父对象和任意子对象-----------这就是组合模式。
	QObject对象是不能被复制的,就比如克隆一个人,只是克隆了他自己,却没有克隆他的子孙,所以这两个人是完全不同的两个对象。
	每个QObject对象都将指向各个子对象的指针放在一个QObjectList(子对象列表)中。
	子对象列表为子-父对象建立了双向联系,父对象知道他子对象的地址,子对象知道他父对象的地址。
	给子对象设置父对象,将隐含地把这个对象添加到父对象的子对象列表中。
	父对象会管理自己的子对象,所以在析构时会自动析构子对象。例如一个Widget窗体(父对象)new了很多控件如Button(子对象,并为他设置了父对象),我们是不需要管这些控件的释放的,父对象会自动释放。
	一般没有父对象的在栈上创建,有父对象的在堆上创建。
	查找子对象:children() 	findChildren()

观察者模式:在事件驱动程序中,GUI视图需要对数据对象状态的变化做出响应,以便显示最新信息。当对象状态改变时,就需要一种简介的方式来提醒(并有可能向外发额外的信息)观察者。观察者就是一些正在监听(并响应)状态变化的对象。

QEvent:封装了底层事件的概念

	事件循环是一种程序结构,他将事件划分等级,排队并分发给一些对象。QT中exec()就是进入事件循环。
	事件是低级消息,目标是某个特点的对象。信号是高级消息(对事件进行了封装,如点击按钮的clicked()信号,就是一系列说明鼠标在按钮位置上的底层事件的集合,并确保鼠标操作正确,,,先按下在释放),很可能连接到多个槽(函数),只有进入exec()事件循环,信号才能发到槽上。

你可能感兴趣的:(QT)