1、讲述Qt信号槽机制与优势与不足
优点: ①类型安全。需要关联的信号槽的签名必须是等同的。即信号的参数类型和参数个数同接受该信号的槽的参数类型和参数个数相同。若信号和槽签名不一致,编译器会报错。
②松散耦合。信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无需知道是那个对象的那个信号槽接收它发出的信号,它只需在适当的时间发送适当的信号即可,而不需要关心是否被接受和那个对象接受了。Qt就保证了适当的槽得到了调用,即使关联的对象在运行时被删除。程序也不会奔溃。
③灵活性。一个信号可以关联多个槽,或多个信号关联同一个槽。
不足:速度较慢。与回调函数相比,信号和槽机制运行速度比直接调用非虚函数慢10倍。
原因:①需要定位接收信号的对象。②安全地遍历所有关联槽。③编组、解组传递参数。④多线程的时候,信号需要排队等待。(然而,与创建对象的new操作及删除对象的delete操作相比,信号和槽的运行代价只是他们很少的一部分。信号和槽机制导致的这点性能损耗,对实时应用程序是可以忽略的。)
2、Qt信号和槽的本质是什么
Qt信号和槽是一种用于实现对象间通信的机制。其本质是一种事件驱动的机制,通过信号和槽的连接,当信号被触发时,槽函数会被自动调用,从而实现对象间的通信和交互。 信号是一种特殊的函数,用于表示某种事件的发生,当事件发生时,信号会被自动发送出去,通知所有连接到该信号的槽函数。 槽是一种特殊的函数,用于处理信号的触发事件,当槽函数被连接到某个信号时,当该信号被触发时,槽函数会自动被调用,从而实现对信号的响应。
信号和槽的连接是通过Qt的元对象系统实现的,每个QObject派生类都有一个元对象,用于存储该类的属性、方法和信号槽信息。通过元对象系统,可以在运行时动态地连接信号和槽,从而实现对象间的通信。 总之,Qt信号和槽是一种事件驱动的机制,通过信号和槽的连接,实现了对象间的通信和交互。
3、Qt 三大核心机制
信号槽
信号槽的五种连接方式(图略)
connect(信号发出者,信号,信号接收者,槽,连接方式(隐藏默认自动连接))//五个参数
元对象系统
元对象系统分为三大类:QObject类、Q_OBJECT宏和元对象编译器moc
Qt的类包含Q_OBJECT宏 moc编译器会对该类编译成标准的C++代码
事件模型
事件的创建
鼠标事件,键盘事件,窗口调整事件,模拟事件
事件的交付
Qt通过调用虚函数QObject::event()来交付事件。
事件循环模型
主事件循环通过调用QCoreApplication::exec()启动,
随着QCoreApplication::exit()结束,
本地的事件循环可用利用QEventLoop构建。
一般来说,事件是由触发当前的窗口系统产生的,但也可以通过使用 QCoreApplication::sendEvent()和
QCoreApplication::postEvent()来手工产生事件。需要说明的是QCoreApplication::sendEvent()会立即发送事件, QCoreApplication::postEvent()则会将事件放在事件队列中分发。