网上有很多解释说明如何处理Qt中的异常。他们也是这样做的,但有一点不同:有些人正在返回true
(this),而有些人正在返回false
(this,this和{{ 3}})。
那么,QApplication::notify()
在捕获异常时应该返回什么?
this告诉:
向接收者发送事件:receiver->事件(事件)。返回从接收者的事件处理程序返回的值。请注意,对于发送到任何线程中任何对象的所有事件,都会调用此函数。
对于某些类型的事件(例如鼠标和键事件),如果接收者对事件不感兴趣,事件将传播到接收者的父级,依此类推直到顶级对象(即,它返回false )。
答案 0 :(得分:4)
notify
会返回QObject::event
返回的内容。如果事件已处理且您不想再传播该事件,则应返回true,否则返回false。这些是Qt的语义。
当事件处理程序抛出异常时,通常会有人猜测是否应该进一步处理该事件。
有两种推理方式,当然彼此不一致:
抛出的异常表示未处理该事件。所以你应该返回false。
抛出异常是因为正在处理事件 - 它很可能来自非平凡的代码。所以它只是对事件的处理,但它失败了,所以你应该返回true。
Qt的语义似乎与第一个答案排得更好 - 返回false。在实践中,它可能根本不重要,除非事件由小部件处理,如果事件过早消失,您可能会遇到不良行为。所以,假可能总体上是一个更好的选择。
调用窗口小部件中的事件传播。如果子窗口小部件不使用(处理)事件,则event
方法以及notify
将返回false,并且该事件将传递给窗口小部件的父窗口。如果在成功调用event
将返回false的情况下返回true,则表示您正在从底层父窗口小部件中有效地过滤事件。这是可能的不当行为的根源。