如何专注于下一个/上一个小部件

时间:2014-05-06 15:27:22

标签: qt

我正在重写QPlainTextEdit以成为单行编辑小部件。换句话说,我希望它看起来像QLineEdit,但要具有QPlainTextEdit的扩展功能,例如文本格式等。

到目前为止,我唯一的麻烦是当我从QPlainTextEdit派生的小部件处于焦点时按Tab / Shift + Tab时,我不知道如何将焦点传递给下一个/上一个小部件。我已经开始重写keyPressEvent以捕获正在按下的Tab键,但那又是什么?如何更改窗口小部件的焦点?

我只能想到太复杂的解决方案(例如向父母发出信号,重点应该改变,但这似乎是愚蠢的矫枉过正)。我打赌必须有一个非常简单的解决方案来解决这个问题。

3 个答案:

答案 0 :(得分:1)

使用QPlainTextEdit::setTabChangesFocus功能将tabChangesFocus对象的QPlainTextEdit属性设置为true

答案 1 :(得分:1)

我接受了thuga的答案,这是最简单的方法。但是我发现另一个对于没有tabChangesFocus属性的小部件可能更通用。像这样覆盖keyPressEvent:

def keyPressEvent(self, event):
    if event.key() == QtCore.Qt.Key_Tab:
        self.parent().focusNextChild()
    elif event.key() == QtCore.Qt.Key_Backtab:
        self.parent().focusPrevChild()

答案 2 :(得分:0)

您可以尝试两件事:

  • 创建QAction并将其添加到小部件。将QShortcut设置为QKeySequence(Qt::Key_Tab)的操作。连接改变焦点的动作whith插槽。

  • 直接使用new QShortcut(QKeySequence(Qt::Key_Tab), widgetPtr, SLOT(changeFocus()));

所以现在不需要继承你的控件来捕获keyPressEvent。请注意,您可能需要更改快捷方式上下文以最符合您的要求。