QLineEdit не обновляет текст с помощью QKeyEvent

Я пытаюсь реализовать виджет виртуальной клавиатуры. Самый простой способ, который я мог придумать, - это создать экземпляры QKeyEvent и отправить их с помощью QApplication.postEvent() в виджет, находящийся в фокусе.

Во-первых, я пытаюсь обновить исправленный QLineEdit, который у меня есть, поэтому код:

   self.pushButton_A.clicked.connect(self.virtualKeyPress)

[...]

   def virtualKeyPress(self):
        self.keyPress = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier)
        QApplication.postEvent(self.lineEdit, self.keyPress)

Но экземпляр QLineEdit не будет обновлять свой текст в графическом интерфейсе!

Подсказки? Здоровья и спасибо!

РЕШЕНО: (спасибо HeyYO)

   self.pushButton_A.clicked.connect(self.virtualKeyPress)

[...]

   def virtualKeyPress(self):
        self.keyPress = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier, 'A')
        QApplication.postEvent(self.lineEdit, self.keyPress)

В моем случае вместо Qt.Key_A я установил этот аргумент равным 0, чтобы я мог подключить все свои кнопки к методу virtualKeyPress. Мне также пришлось установить политику фокуса для всех кнопок на «без фокуса» (сделал это непосредственно в Qt Designer). Окончательный код был следующим:

def virtualKeyPress(self):
    self.keyPressed = QString(self.sender().text())
    self.keyPress = QKeyEvent(QEvent.KeyPress, 0, Qt.NoModifier, self.keyPressed)
    self.focusWidget = QApplication.focusWidget()        
    QApplication.postEvent(self.focusWidget, self.keyPress)

person Daniel Severo    schedule 12.11.2015    source источник


Ответы (1)


Вы пытались указать текстовый аргумент;

self.keyPress = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier, "A")

У меня это сработало в Qt5 и C++, поэтому я предполагаю, что это сработает и у вас.

person HeyYO    schedule 12.11.2015
comment
Спасибо! Это сработало, теперь мне просто нужно понять, почему... :) - person Daniel Severo; 12.11.2015
comment
А, теперь я вижу. Я неверно истолковал класс QKeyEvent. Я помещал перечисление Qt.Key_$ во флаг ключа int! Еще раз спасибо. - person Daniel Severo; 12.11.2015
comment
Добавил окончательный код виртуальной клавиатуры! Наслаждаться :) - person Daniel Severo; 12.11.2015