我正在尝试在按下tab键时实现自动完成,以获取所有可能的第一个自动完成。
但是,在基于QWidget的主窗口中,按下tab键会使得QLineEdit失去焦点,之后自动完成弹出框也会隐藏。
有没有一种方法可以解决这个问题?
但是,在基于QWidget的主窗口中,按下tab键会使得QLineEdit失去焦点,之后自动完成弹出框也会隐藏。
有没有一种方法可以解决这个问题?
QLineEdit
,创建了一个tabPressed
信号,每次按下Tab键时都会发出。然后,将此信号连接到同一类的一个方法,该方法执行以下操作:
class MyLineEdit(QLineEdit):
tabPressed = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
self._compl = QCompleter()
self.tabPressed.connect(self.next_completion)
def next_completion(self):
index = self._compl.currentIndex()
self._compl.popup().setCurrentIndex(index)
start = self._compl.currentRow()
if not self._compl.setCurrentRow(start + 1):
self._compl.setCurrentRow(0)
def event(self, event):
if event.type() == QEvent.KeyPress and event.key() == Qt.Key_Tab:
self.tabPressed.emit()
return True
return super().event(event)
可能有更好的解决方案,但我想到的一个方法是将表单上所有其他小部件的焦点策略更改为不包括“tab”焦点的选项。唯一不使用Tab键的选项是Qt :: ClickFocus
和Qt :: NoFocus
。