crossplatform.ru

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


  Ответ в Как сделать переход между полями ввода на форме нажимая Enter
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
sindbad07 Дата 17.5.2010, 17:12
  А у кого еще кроме меня такой глюк при табуляции энтером: при переходе с поля ввода на чекбокс рамка фокуса у чекбокса забывает нарисоваться?
alcionov Дата 6.5.2010, 14:45
 
Цитата(arial @ 6.5.2010, 7:04) *
После пункта 1 реализуй для окна eventFilter:


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

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

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

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

arial Дата 6.5.2010, 7:04
 
Цитата(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 Дата 5.5.2010, 15:43
 
Цитата(molchanoviv @ 4.5.2010, 13:16) *
отлавливай KeyPressEvent и обрабатывай нажатие клавиши Enter


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

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

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

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

PS Такое надо, когда экранные формы не могут быть заранее заготовлены, например, дизайнером, а генерятся по ходу выполнения.
arial Дата 5.5.2010, 7:02
 
Цитата(molchanoviv @ 4.5.2010, 13:16) *
отлавливай KeyPressEvent и обрабатывай нажатие клавиши Enter
Возможно удобнее будет использовать QObject::eventFilter
Litkevich Yuriy Дата 4.5.2010, 15:37
 
Цитата(sindbad07 @ 4.5.2010, 17:26) *
Кароче как всегда - доработать молотком и напильником
посмотри исходник QWidget'а, как он клавишу Tab обрабатывает.
sindbad07 Дата 4.5.2010, 13:26
 
Цитата(molchanoviv @ 4.5.2010, 14:16) *
отлавливай KeyPressEvent и обрабатывай нажатие клавиши Enter


Кароче как всегда - доработать молотком и напильником :)
molchanoviv Дата 4.5.2010, 13:16
  отлавливай KeyPressEvent и обрабатывай нажатие клавиши Enter
sindbad07 Дата 4.5.2010, 13:12
 
Цитата(Litkevich Yuriy @ 4.5.2010, 14:08) *
он обычно активирует умалчиваемую кнопку в диалоге (иногда "применяет" введённые данные). Да и вообще это стандартное поведение во многих графических оболочках

А как проще всего сделать перескок по кнопке Enter?
Litkevich Yuriy Дата 4.5.2010, 13:08
 
Цитата(sindbad07 @ 4.5.2010, 16:59) *
а как же Enter?
он обычно активирует умалчиваемую кнопку в диалоге (иногда "применяет" введённые данные). Да и вообще это стандартное поведение во многих графических оболочках
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 10:48