crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Как сделать переход между полями ввода на форме нажимая Enter
sindbad07
  опции профиля:
сообщение 4.5.2010, 12:59
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 28.4.2010
Пользователь №: 1671

Спасибо сказали: 0 раз(а)




Репутация:   0  


Подскажите почему на форме переход между полями ввода осуществляется только при нажатии Tab, а как же Enter?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.5.2010, 13:08
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(sindbad07 @ 4.5.2010, 16:59) *
а как же Enter?
он обычно активирует умалчиваемую кнопку в диалоге (иногда "применяет" введённые данные). Да и вообще это стандартное поведение во многих графических оболочках
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sindbad07
  опции профиля:
сообщение 4.5.2010, 13:12
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 28.4.2010
Пользователь №: 1671

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 4.5.2010, 14:08) *
он обычно активирует умалчиваемую кнопку в диалоге (иногда "применяет" введённые данные). Да и вообще это стандартное поведение во многих графических оболочках

А как проще всего сделать перескок по кнопке Enter?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 4.5.2010, 13:16
Сообщение #4


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


отлавливай KeyPressEvent и обрабатывай нажатие клавиши Enter
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sindbad07
  опции профиля:
сообщение 4.5.2010, 13:26
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 28.4.2010
Пользователь №: 1671

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(molchanoviv @ 4.5.2010, 14:16) *
отлавливай KeyPressEvent и обрабатывай нажатие клавиши Enter


Кароче как всегда - доработать молотком и напильником :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.5.2010, 15:37
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(sindbad07 @ 4.5.2010, 17:26) *
Кароче как всегда - доработать молотком и напильником
посмотри исходник QWidget'а, как он клавишу Tab обрабатывает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
arial
  опции профиля:
сообщение 5.5.2010, 7:02
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 39
Регистрация: 27.9.2009
Пользователь №: 1121

Спасибо сказали: 9 раз(а)




Репутация:   0  


Цитата(molchanoviv @ 4.5.2010, 13:16) *
отлавливай KeyPressEvent и обрабатывай нажатие клавиши Enter
Возможно удобнее будет использовать QObject::eventFilter
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
alcionov
  опции профиля:
сообщение 5.5.2010, 15:43
Сообщение #8


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 3.5.2010
Пользователь №: 1683

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(molchanoviv @ 4.5.2010, 13:16) *
отлавливай KeyPressEvent и обрабатывай нажатие клавиши Enter


Именно это я сейчас и пробую делать без такого же успеха:

1. Создаю окно вручную от QWidget
2. Создаю несколько QLineEdit, передавая им это окно как парент
3. Всё это нормально показываю на экране, где первый из едитов имеет фокус ввода
4. По наступлении события выполняю focusNextChild()
5. Ничего не происходит

Пробовал напрямую: QLineEdit::clearFocus() и QLineEdit::setFocus() - фокус стоит как вкопанный.

Может быть кто-то пробовал реально эту технологию? Буду признателен за подсказку.

PS Такое надо, когда экранные формы не могут быть заранее заготовлены, например, дизайнером, а генерятся по ходу выполнения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
arial
  опции профиля:
сообщение 6.5.2010, 7:04
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 39
Регистрация: 27.9.2009
Пользователь №: 1121

Спасибо сказали: 9 раз(а)




Репутация:   0  


Цитата(alcionov @ 5.5.2010, 15:43) *
Именно это я сейчас и пробую делать без такого же успеха:

1. Создаю окно вручную от QWidget
2. Создаю несколько QLineEdit, передавая им это окно как парент
3. Всё это нормально показываю на экране, где первый из едитов имеет фокус ввода
4. По наступлении события выполняю focusNextChild()
5. Ничего не происходит
После пункта 1 реализуй для окна eventFilter:
bool MyWindow::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() != QEvent::KeyPress) {
        return QObject::eventFilter(obj, event);
    }

    QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);

    switch (keyEvent->key()) {
    case Qt::Key_Return:
    case Qt::Key_Enter:
        if (focusNextChild()) {
            return true;
        }
        return false;
    default:
        return QObject::eventFilter(obj, event);
    }
}
После пункта 2 для каждого из потомков инсталлируй eventFilter окна-родителя. Всё будет работать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
alcionov
  опции профиля:
сообщение 6.5.2010, 14:45
Сообщение #10


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 3.5.2010
Пользователь №: 1683

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(arial @ 6.5.2010, 7:04) *
После пункта 1 реализуй для окна eventFilter:


Спасибо за скорый ответ! Значит, если я правильно понял, смысл в том, что выполнять управление фокусом надо находясь в потоке фильтрации событий?

В моём же случае дело в том, что события фильтруются в другом месте, так как мы имеем дело с устройством, где экран и клавиатура - это совершенно разные, никак не связанные устройства, с точки зрения Qt у нас просто нет клавиатуры.

Возникает вопрос: может быть мне надо вместо того, чтобы тупо выполнять функцию focusNextChild(), послать пользовательское сообщение, чтобы его отфильтровала предложенная тобой функция заместо нажатия на клавишу? Я не знаю, позволяет ли Qt пользовательские сообщения, но думаю, что такая продвинутая вещь не может не предусматривать этого.

Как ты считаешь?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 5.2.2023, 11:06