Получение keyPressEvent в QLineEdit в Qt - PullRequest
2 голосов
/ 17 мая 2011

Я новичок в 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 голосов
/ 01 января 2012

Ваш 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...