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实例不会更新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)

在我的例子中,代替Q.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)

您是否尝试过指定文本参数;

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

在Qt5&C++,所以我认为它也适用于您。

相关内容

  • 没有找到相关文章

最新更新