Russian Qt Forum
Октябрь 02, 2024, 01:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Enter as Tab  (Прочитано 6504 раз)
UVV
Гость
« : Декабрь 01, 2007, 07:55 »

Подскажите, пожалуйста, как грамотно это реализовать, если присутствуют lineEdit, comboBox, textEdit, checkBox, dateTimeEdit.
Помню, что недавно было, но что-то не могу найти.
Ткните, пожалуйста.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Декабрь 01, 2007, 13:54 »

eventFilter должен спасти...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #2 : Декабрь 02, 2007, 06:53 »

Читайте Бланше!

Код:
CustomerInfoDialog::CustomerInfoDialog(QWidget *parent)
    : QDialog(parent)
{
    ...
    firstNameEdit->installEventFilter(this);
    lastNameEdit->installEventFilter(this);
    cityEdit->installEventFilter(this);
    phoneNumberEdit->installEventFilter(this);
}


Код:
bool CustomerInfoDialog::eventFilter(QObject *target, QEvent *event)
{
    if (target == firstNameEdit || target == lastNameEdit
            || target == cityEdit || target == phoneNumberEdit) {
        if (event->type() == QEvent::KeyPress) {
            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
            if (keyEvent->key() == Qt::Key_Space) {
                focusNextChild();
                return true;
            }
        }
    }
    return QDialog::eventFilter(target, event);
}

« Последнее редактирование: Декабрь 02, 2007, 06:58 от Sergey B. » Записан
UVV
Гость
« Ответ #3 : Декабрь 03, 2007, 17:53 »


Код:
... if (keyEvent->key() == Qt::Key_Space) ...
Большое спасибо!
Всё работает, за исключением одного момента.
Если Qt::Key_Space заменить на Qt::Key_Enter, то по нажатию Enter срабатывает кнопка Ok моего диалога.
Что делать в этом случае?
Читайте Бланше!
А можно поподробнее?
А ещё лучше ссылку! ;-)
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #4 : Декабрь 03, 2007, 18:46 »

Большое спасибо!
Всё работает, за исключением одного момента.
Если Qt::Key_Space заменить на Qt::Key_Enter, то по нажатию Enter срабатывает кнопка Ok моего диалога.
Что делать в этом случае?
смотреть в сторону setDefault(false) и setAutoDefault(false) для этой кнопки
Записан
UVV
Гость
« Ответ #5 : Декабрь 04, 2007, 05:54 »

смотреть в сторону setDefault(false) и setAutoDefault(false) для этой кнопки
Да, спасибо. Поставил false, но на Enter почему-то нет никакой реакции.
Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #6 : Декабрь 05, 2007, 06:30 »

Код:
Qt::Key_Return

Qt::Key_Enter - это Enter на цифровой клавиатуре.
Лучше вмего сделать вот так:

Код:
if (keyEvent->key() == Qt::Key_Return || keyEvent->key()==Qt::Key_Enter) {
                focusNextChild();
                return true;
}

т.к. юзер может использовать Enter и там и там.
« Последнее редактирование: Декабрь 05, 2007, 06:36 от Sergey B. » Записан
UVV
Гость
« Ответ #7 : Декабрь 05, 2007, 10:51 »

Покорнейше благодарю!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 22.