Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Vladimir2006 от Ноябрь 20, 2006, 20:00



Название: Фокус ввода
Отправлено: Vladimir2006 от Ноябрь 20, 2006, 20:00
Привет всем!

Подскажите пожалуйста каким образом в Qt 4.1.4 под линуксом установить фокус ввода для требуемого виджета?

У меня есть класс, наследник QWidget, на нем три контрола: QListWidget и два QPushButton. Я в конструкторе родителя создаю эти три контрола и потом вызываю для виджета списка функцию setFocus(), reason-ы все перебрал. Этот список вроди как получает фокус ввода (focus() возвращает true), но реально этот контрол остается без фокуса, пока Tab не нажмешь.

Как заставить список сфокусироваться на вводе?
Спасибо.


Название: Фокус ввода
Отправлено: bigirbis от Ноябрь 20, 2006, 20:41
Думаю, что ты путаешь понятия focus и selection


Название: Фокус ввода
Отправлено: Vladimir2006 от Ноябрь 20, 2006, 20:54
дело в том, что при создании виджета, на котором расположен список, я хочу иметь возможность перемещаться по итемам списка при помощи курсорных кнопок, но это можно сделать только если список будет иметь фокус ввода

если нажать Tab, то список получает фокус и все ок

я нашел функцию grabKeyboard(), заюзал ее пока для списка, но это немного не то, что я хотел, теперь в списке пожно перемещаться по итемам, даже если список не имеет фокуса и весь ввод с клавы идет на список

а хотелось бы с фокусом разобраться


Название: Фокус ввода
Отправлено: bigirbis от Ноябрь 20, 2006, 21:46
Код:
listWidget->setFocus( Qt::TabFocusReason );

...по идее должно хватить.
Возможно перед этим нужно будет вызвать
void setCurrentItem ( QListWidgetItem * item )


Название: Фокус ввода
Отправлено: Vladimir2006 от Ноябрь 20, 2006, 21:48
перехватил эвент QShowEvent в родительском виджете и в этом обработчике вызвал setFocus() для нужного дочернего виджета
работает


Название: Фокус ввода
Отправлено: bigirbis от Ноябрь 20, 2006, 22:10
Изврат!
Просто фокус на QListWidget нужно ставить после создания последнего дочернего элемента.


Название: Фокус ввода
Отправлено: burkav84 от Ноябрь 20, 2006, 23:00
Можно еще так: в кострукторе своего widgeta (родительский класс для QListWidget и QPushButtons):

setFocusProxy(указатель на QListWidget) - после этого при получении фокуса твой widget будет устанавливать фокус на QListWidget.


Название: Фокус ввода
Отправлено: Vladimir2006 от Ноябрь 21, 2006, 10:53
Цитата: "bigirbis"
Изврат!
Просто фокус на QListWidget нужно ставить после создания последнего дочернего элемента.


пробовал, не работает


Название: Фокус ввода
Отправлено: bigirbis от Ноябрь 21, 2006, 19:53
Помимо фокуса выстави еще и selection


Название: Фокус ввода
Отправлено: Vladimir2006 от Ноябрь 21, 2006, 20:06
с селекшином проблем нет, он работает, подсвечивается нужный итем
через setFocusProxy кстати тоже не работает из конструктора

казалось бы простая вещь - установить фокус ввода, а какая проблема :)