Qt 如何关注下一个/上一个小部件
我正在覆盖QPlainTextEdit,使其成为一个单行编辑小部件。换句话说,我希望它看起来像QLineEdit,但具有QPlainTextEdit的扩展功能,如文本格式等 到目前为止,我唯一的问题是,当从QPlainTextEdit派生的小部件处于焦点时,当我按Tab/Shift+Tab时,我不知道如何将焦点传递给下一个/上一个小部件。我已经开始覆盖keyPressEvent来捕获按下的Tab键,但接下来呢?如何从窗口小部件更改焦点Qt 如何关注下一个/上一个小部件,qt,Qt,我正在覆盖QPlainTextEdit,使其成为一个单行编辑小部件。换句话说,我希望它看起来像QLineEdit,但具有QPlainTextEdit的扩展功能,如文本格式等 到目前为止,我唯一的问题是,当从QPlainTextEdit派生的小部件处于焦点时,当我按Tab/Shift+Tab时,我不知道如何将焦点传递给下一个/上一个小部件。我已经开始覆盖keyPressEvent来捕获按下的Tab键,但接下来呢?如何从窗口小部件更改焦点 我只能想到太复杂的解决方案(比如向家长发出信号,说重点应该改
我只能想到太复杂的解决方案(比如向家长发出信号,说重点应该改变,但这似乎是愚蠢的过激行为)。我打赌这个问题一定有一个非常简单的解决方案。使用函数将
QPlainTextEdit
对象的tabChangesFocus
属性设置为true
。使用函数将QPlainTextEdit
对象的tabChangesFocus
属性设置为true
。Ithuga接受了答案,这是最简单的方法。然而,我还发现了另一个对于没有tabChangesFocus属性的小部件可能更通用的方法。覆盖按键事件,如下所示:
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Tab:
self.parent().focusNextChild()
elif event.key() == QtCore.Qt.Key_Backtab:
self.parent().focusPrevChild()
我接受了thuga的答案,这是最简单的方法。然而,我还发现了另一个对于没有tabChangesFocus属性的小部件可能更通用的方法。覆盖按键事件,如下所示:
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Tab:
self.parent().focusNextChild()
elif event.key() == QtCore.Qt.Key_Backtab:
self.parent().focusPrevChild()
有两件事你可以尝试:
- 创建
并将其添加到小部件中。将QAction
设置为具有QShortcut
的操作。将动作与更改焦点的插槽连接QKeySequence(Qt::Key_选项卡)
- 直接使用新的QShortcut(QKeySequence(Qt::Key_Tab)、widgetPtr、SLOT(changeFocus())代码>
因此,现在不需要继承控件来捕获keyPressEvent。请注意,您可能需要更改快捷方式上下文,以使其与您的需求最佳匹配。有两件事可以尝试:
- 创建
并将其添加到小部件中。将QAction
设置为具有QShortcut
的操作。将动作与更改焦点的插槽连接QKeySequence(Qt::Key_选项卡)
- 直接使用新的QShortcut(QKeySequence(Qt::Key_Tab)、widgetPtr、SLOT(changeFocus())代码>
因此,现在不需要继承控件来捕获keyPressEvent。请注意,您可能需要更改快捷方式上下文,以使其与您的要求最为匹配。谢谢。这是难以置信的简单,它的工作。我没有注意到QPlainTextEdit中有这样的属性。谢谢。这是难以置信的简单,它的工作。我没有注意到QPlainTextEdit中有这样的属性。