【发布时间】:2011-02-18 07:49:05
【问题描述】:
我浏览了 QMainWindow 内部的方法,发现有些部分(例如 resizeEvent 和 winEvent)没有作为信号实现,而是你必须继承这个类才能覆盖它们。
我的问题是,信号和槽的效率如何,是否有可能将这些类型的函数实现为其他类可以订阅的信号。例如,在高性能游戏引擎内部。
【问题讨论】:
标签: c++ performance qt4 game-engine signals-slots
我浏览了 QMainWindow 内部的方法,发现有些部分(例如 resizeEvent 和 winEvent)没有作为信号实现,而是你必须继承这个类才能覆盖它们。
我的问题是,信号和槽的效率如何,是否有可能将这些类型的函数实现为其他类可以订阅的信号。例如,在高性能游戏引擎内部。
【问题讨论】:
标签: c++ performance qt4 game-engine signals-slots
据我记得,Trolltech 表示信号/插槽调用比virtual 调用慢大约 10 倍。您应该能够轻松地每秒处理数万甚至数十万个信号。
【讨论】:
信号和槽的设计使不同的对象可以通信,这两个对象都在您的控制之下。
您提到的事件一次只涉及 一个 对象,事件循环直接通知该对象。这里不需要信号或槽。
请注意,如果您愿意,可以在事件成员函数内发出信号。这通常是对事件做出反应的正确方式。这样,其他对象可以订阅某些内容。
【讨论】:
从 QMainWindow 派生,从那里重新实现 resize() 和 emit() 信号,如果您想在其他地方对此类信号做出反应。
【讨论】: