Qt:检测特定QWidget之外的mousePressEvent

时间:2011-11-18 16:58:19

标签: qt qt4

我有一个包含多个子对象的小部件,用户可以通过单击它们来选择它们。

我想在用户点击小部件外部时清除当前选择,我想知道如何最好地检测这些点击。

一些约束:

  • 通过mousePressEvents吃掉eventFilter周围物体真的不太可行。
  • 如果我可以避免使用grabMouse(),我会因为来自the docs的此警告:
      

    警告:抓取鼠标的应用程序中的错误通常会锁定终端。请谨慎使用此功能,并在调试时考虑使用 -nograb 命令行选项。

  •   

这会让我有其他选择吗?

注意:此应用程序将跨平台部署(至少在Windows和Ubuntu上)

3 个答案:

答案 0 :(得分:5)

我倾向于使用QWidget的focusOutEvent

来检查您的小部件是否失去焦点

答案 1 :(得分:2)

当焦点小部件发生变化时,会发出QApplication::focusChanged信号。您可以检查新聚焦的窗口小部件是否不在您的窗口小部件集中,然后根据该窗口小部件取消选择。

您可以使用QApplication::focusWidget获取当前关注的小部件。

答案 2 :(得分:-1)

mousePressEvent()

  

当您在窗口外单击时,默认实现会实现弹出窗口小部件的关闭。

这可能就是你的意思?