gpt4 book ai didi

qt - 单击窗口上的任何其他地方时如何从 QLineEdit 中移除焦点

转载 作者:行者123 更新时间:2023-12-04 03:02:30 34 4
gpt4 key购买 nike

我正在开发一个自定义 Qt 按钮,如果您双击它,它允许您编辑按钮上的文本。双击按钮时,出现 QLineEdit出现在按钮上的文本允许用户编辑按钮上的文本的位置。我的要求是,如果用户单击应用程序窗口中的任意位置,QLineEdit应该消失并取消编辑操作。这在某些情况下有效。具体来说,如果我点击任何能够输入文本的东西,它就会起作用。窗口的其他部分无法按预期工作。我将单击应用程序窗口的空白部分,然后是 QLineEdit保持其焦点。在这些情况下,我如何移除它的焦点?

最佳答案

我找到了一个似乎有效的解决方案,但如果有其他选择,我仍然愿意接受。我正在使用 PyQt4,所以我的例子是在 python 中:

创建一个 QLineEdit 的子类,这样我就有了一个新类型。我不希望或不需要所有 QLineEdit 实例上的这种行为;只是这些特定的。

class MyLineEdit(QtGui.QLineEdit):
pass

现在,在我的 QMainWindow 子类中,我覆盖了 mousePressEvent()执行。它获取当前聚焦的小部件。如果该小部件的类型为 MyLineEdit ,清除焦点。
class MyMainWindow(QtGui.QMainWindow):
def ...

def mousePressEvent(self, event):
focused_widget = QtGui.QApplication.focusWidget()
if isinstance(focused_widget, MyLineEdit):
focused_widget.clearFocus()
QtGui.QMainWindow.mousePressEvent(self, event)

def ...

这让我得到了我正在寻找的行为,这样如果用户点击应用程序窗口上的任何地方,焦点就会被清除。

编辑:我确实发现了一个警告。我有一个 QTreeView在主窗口中。如果用户单击树 View ,则不会从文本编辑字段中移除焦点。

关于qt - 单击窗口上的任何其他地方时如何从 QLineEdit 中移除焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4466797/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com