我正在重写QPlainTextEdit以成为单行编辑小部件。换句话说,我希望它看起来像QLineEdit,但要具有QPlainTextEdit的扩展功能,例如文本格式等。
到目前为止,我唯一的麻烦是当我从QPlainTextEdit派生的小部件处于焦点时按Tab / Shift + Tab时,我不知道如何将焦点传递给下一个/上一个小部件。我已经开始重写keyPressEvent以捕获正在按下的Tab键,但那又是什么?如何更改窗口小部件的焦点?
我只能想到太复杂的解决方案(例如向父母发出信号,重点应该改变,但这似乎是愚蠢的矫枉过正)。我打赌必须有一个非常简单的解决方案来解决这个问题。
答案 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。请注意,您可能需要更改快捷方式上下文以最符合您的要求。