我有一个包含多个子对象的小部件,用户可以通过单击它们来选择它们。
我想在用户点击小部件外部时清除当前选择,我想知道如何最好地检测这些点击。
一些约束:
mousePressEvents
吃掉eventFilter
周围物体真的不太可行。grabMouse()
,我会因为来自the docs的此警告:
警告:抓取鼠标的应用程序中的错误通常会锁定终端。请谨慎使用此功能,并在调试时考虑使用 -nograb 命令行选项。
这会让我有其他选择吗?
注意:此应用程序将跨平台部署(至少在Windows和Ubuntu上)
答案 0 :(得分:5)
我倾向于使用QWidget的focusOutEvent
答案 1 :(得分:2)
当焦点小部件发生变化时,会发出QApplication::focusChanged
信号。您可以检查新聚焦的窗口小部件是否不在您的窗口小部件集中,然后根据该窗口小部件取消选择。
您可以使用QApplication::focusWidget
获取当前关注的小部件。
答案 2 :(得分:-1)