qt的元对象系统
功能:
1.提供了信号和槽的机制,可以用于对象间的通信
2.提供了实时的类型信息
3.提高了动态的属性系统
基于:
1.QObject类:是所有QT类的基类,是QT 对象模型的核心,该模型的核心功能是信号和槽的通信机制
2.Q_OBJECT宏:只有加入了该宏,你才能使用QT中的信号和槽的机制,不管是否使用信号槽,所有QObject的子类都使用Q_OBJECT宏
3.moc编译器:元对象编译器,工作是将c++编译器不认识的东西,转换成认识的东西,例如信号和槽的关键字
```
qt的属性系统
```c
qt的事件系统
功能:
在qt中,事件就是对象,是QEvent的子类,用来表示在应用程序中发生的事件或者是应用程序要处理的外部活动产生的事件。
如何发送事件:
当一个事件发生时,qt会构造一个QEvent的子类对象来表示事件的发生,然后再调用event()函数,将发生的事件的对象发送给特定的QObject对象。这个函数会检查事件的类型,并且会根据事件的类型调用相应的事件处理函数,事件处理函数处理完事件后会返回一个bool类型的值,表示事件被处理还是被忽略。
常用的事件类型:
QResizeEvent:窗口尺寸发生改变时,触发的事件
QPaintEvent:窗口被重新绘制时,触发的事件
QMouseEvent:关于鼠标的一些是事件,例如单击,双击等
QKeyEvent:键盘触发的事件
QCloseEvent:关闭窗口时产生的事件
处理事件的方式:
1.重写对应的事件处理函数
2.重写QCoreApplication::notify()
3.为QCoreApplication::instance()安装一个事件过滤器
4.重写QObject::event()
5.给相应的接受对象安装一个事件过滤器
qt的对象树
原理:当创建了一个QObject时,如果使用了其他的对象的类作为其父类,就会将这个QObject的对象添加到其父对象的children()列表中。当父类销毁时,也会将子类的对象销毁。例如关闭一个界面。那么这个界面的所有组件都会关闭。
qt的timers和fndChild
timers:
QObject提供一个基础的定时器,使用QObject::startTimer()可以实现毫秒级别的定时器,直到显式的传递一个timerid调用QObject::killTimer()。但是该程序只能在事件循环中使用,当一个定时器触发时,应用程序会发送一个QtimerEvent,直到定时器事件被处理。
使用方法:
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(updateCaption()));
timer->start(1000);
findChild:
这个方法可以用来查询父组件的所有孩子组件
使用方法:
QObject::findChild(const QString & name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively)