在QWidget中,鼠标和绘画以及其他事件不是信号,而是要重载的虚函数。为什么会这样,而不是一致?
答案 0 :(得分:2)
虽然我在Qt的文档中找不到任何说明他们使用虚拟函数进行事件的动机,但我猜:
QWidget
发出的信号可能没有意义。如果我创建自己的小部件派生自QWidget
,为什么我的小部件发出的信号只是连接回小部件本身的插槽?这也有破坏封装的危险,因为信号总是“公开”。即使上述情况都不正确,尝试将信号用于事件仍然会产生很多架构问题。例如,单个事件通常被传递给多个不同的对象(例如,在某些对象不希望处理事件的情况下)。在这种情况下,哪个对象发出指示事件发生的信号?它肯定不是事件的目标(即小部件,正如您在上面暗示的那样)。它必须是其他一些全球性的对象。但如果这是真的,我们可能只是在每个小部件上实现虚拟插槽来处理信号。这基本上只是让我们回到了虚拟功能开始的地方!