在Qt中的QLineEdit中获取keyPressEvent

时间:2011-05-17 11:15:45

标签: qt4

我是Qt的新手。我正在使用Qt4.7与linux操作系统。我的应用程序被编译为嵌入式mipsel设备。

在我的应用程序中,有一个QWidget包含两个pushbuttons和一个QLineEdit。最初隐藏QLineEdit

我的要求是:当我按下应用程序键盘上的某个键时,应显示QlineEdit并通过该键输入。之后,它应该采取所有关键输入。同时它不会显示光标闪烁。

但是,当按下该键时,我的应用程序无法显示QlineEdit

输入密钥后,如果我点击QLineEdit框之外,它仍然可见。但现在我也无法在QLineEdit中输入密钥,即输入密钥后,我必须点击QlineEdit的外部以显示QLineEdit中输入的密钥。

我尝试过:

QLineEdit->setFocusPolicy(Qt::StrongFocus);
this->setFocusPolicy(Qt::StrongFocus);

我有一个keyPressEvent();功能。在那里,我尝试在按下键时显示QlineEdit。 但没有任何进步。我仍然无法解决这个问题。

有人可以就这个问题提出宝贵意见吗?

1 个答案:

答案 0 :(得分:0)

您的keyPressEvent是否包含QWidget?如果是这样,我想它可能在进入QLineEdit

之前吃了所有按键

如果是这种情况,您可以使用QWidget.keyPressEvent只关注QLineEdit,如果它是散焦的。在伪代码中:

class MyContainer(QWidget):
    def keyPressEvent(event):
        if my_qlineedit.isFocused():
            # Do nothing, call default implementation, allowing
            # key-presses to be passed to QLineEdit normally
            super().keyPressEvent(event)
            return

        else:
            # Show QLineEdit (for first keystroke)
            my_qlineedit.setVisible(True)

            # Set focus for future key strokes to be sent directly to the QLineEdit
            my_qlineedit.setFocused(True)

            # Send this key-event to avoid missing a key
            my_qlineedit.keyPressedEvent(event)