2

我正在尝试实现一个虚拟键盘小部件。我能想到的最简单的方法是创建 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)
4

1 回答 1

4

您是否尝试过指定 text 参数?

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

它在 Qt5 和 C++ 中对我有用,所以我假设它也对你有用。

于 2015-11-12T16:45:46.517 回答