如何检测焦点是否从QWidget中的窗口小部件转移到外部?

时间:2012-12-20 11:44:56

标签: qt events widget focus

我使用Qt和PySide在Python中进行编程,我在一个名为editor.py的文件中定义了自定义QWidget,该文件使用Qt Designer中的提升方法插入到windowUi.py中的ui中。

除了使用Elixir编辑sqlite3数据库中的项目并导入ui文件(editor.ui)之外,editor.py中定义的自定义QWidget类也没有太大作用。在editor.ui中有几个QLineEdits和QDateTime小部件。

此小部件最初隐藏在主窗口中,并在需要时显示。到目前为止这么好,但问题是我不能在不需要时隐藏它。当用户点击主窗口中不是导入的编辑器窗口小部件的任何其他位置时,我决定不需要窗口小部件,即从QWidget转移焦点。

我看了这个问题:QWidget focusOutEvent not received并且意识到QWidget确实没有得到关注。

如果我在其上调用setFocusPolicy(StrongFocus),那么只有当用户点击QWidget背景(不在其中的任何小部件上)然后点击外部时,我才能隐藏它。

问题是,我怎样才能做到这样当用户点击这个小部件之外,将焦点从其中的任何QLineEdit或QDateTime转移到其他内容时,QWidget会隐藏自己?

1 个答案:

答案 0 :(得分:0)

QApplication:::focusChanged ( QWidget * old, QWidget * now )做你需要的吗?您可以检查QWidget *now是否是您的QLineEdits / QDateTime之一(f.e.上升为QObject::parent
只需在显示之前连接此信号,然后在隐藏后断开连接。