我正在尝试实现虚拟键盘小部件。我能想到的最简单的方法是创建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实例不会在GUI中更新其文本!
线索?干杯谢谢!
已解决:(感谢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)
答案 0 :(得分:3)
您是否尝试过指定文本参数;
self.keyPress = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier, "A")
在Qt5和C ++中它对我有用,所以我认为它也适合你。