1

我正在使用带有 PySide 的 Qt 在 Python 中编程,并且我在名为 editor.py 的文件中定义了自定义 QWidget,该文件使用 Qt 设计器中的提升方法插入到 windowUi.py 的我的 ui 中。

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

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

我看了这个问题:QWidget focusOutEvent not received并意识到 QWidget 真的没有得到焦点。

如果我在其上调用 setFocusPolicy(StrongFocus) ,那么当且仅当用户单击 QWidget 背景(而不是其中的任何小部件)然后单击外部时,我才能使其隐藏。

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

4

1 回答 1

1

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

于 2012-12-20T12:06:03.760 回答