QApplication :: notify()在捕获异常时应该返回什么

时间:2014-02-10 14:58:50

标签: c++ qt exception-handling

网上有很多解释说明如何处理Qt中的异常。他们也是这样做的,但有一点不同:有些人正在返回truethis),而有些人正在返回falsethisthis和{{ 3}})。

那么,QApplication::notify()在捕获异常时应该返回什么?

this告诉:

  

向接收者发送事件:receiver->事件(事件)。返回从接收者的事件处理程序返回的值。请注意,对于发送到任何线程中任何对象的所有事件,都会调用此函数。

     

对于某些类型的事件(例如鼠标和键事件),如果接收者对事件不感兴趣,事件将传播到接收者的父级,依此类推直到顶级对象(即,它返回false )。

1 个答案:

答案 0 :(得分:4)

notify会返回QObject::event返回的内容。如果事件已处理且您不想再传播该事件,则应返回true,否则返回false。这些是Qt的语义。

当事件处理程序抛出异常时,通常会有人猜测是否应该进一步处理该事件。

有两种推理方式,当然彼此不一致:

  1. 抛出的异常表示未处理该事件。所以你应该返回false。

  2. 抛出异常是因为正在处理事件 - 它很可能来自非平凡的代码。所以它只是对事件的处理,但它失败了,所以你应该返回true。

  3. Qt的语义似乎与第一个答案排得更好 - 返回false。在实践中,它可能根本不重要,除非事件由小部件处理,如果事件过早消失,您可能会遇到不良行为。所以,假可能总体上是一个更好的选择。

    调用窗口小部件中的事件传播。如果子窗口小部件不使用(处理)事件,则event方法以及notify将返回false,并且该事件将传递给窗口小部件的父窗口。如果在成功调用event将返回false的情况下返回true,则表示您正在从底层父窗口小部件中有效地过滤事件。这是可能的不当行为的根源。