我正在尝试实现一个虚拟键盘部件。我能想到的最简单的方法是创建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中更新它的文本!
线索?干杯,谢谢!
RESOLVED: (荣誉到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设计器中直接这样做)。最后的代码如下:
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)发布于 2015-11-12 16:45:46
您是否尝试指定文本参数;
self.keyPress = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier, "A")它对我有效,在Qt5&C++中,所以我假设它也适用于您。
https://stackoverflow.com/questions/33676589
复制相似问题