I made a stupid mistake. if (watched == qApp) is wrong, the "watched" is the obj that is ready to receive the event, but not the qApp whose events are forword to the watcher.