Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vertus от Июля 03, 2012, 09:10



Название: Переключение фокуса. Tab внутри виджета, Ctrl-Tab - между виджетами.
Отправлено: vertus от Июля 03, 2012, 09:10
Всем доброго времени суток!

Есть множество виджетов - панелей, на которых размещены Qt контролы. Переключение фокуса внутри этих панелей должно быть стандартным, а вот между панелями по Ctrl-Tab.

Думаю, как лучше сделать. Роясь в документации, нашел вот такой вот атрибут виджета:
Цитировать
Qt::WA_KeyboardFocusChange. Set on a toplevel window when the users changes focus with the keyboard (tab, backtab, or shortcut).

Получается можно установить окно которому будут приходить все события переключения фокуса по клавиатуре.
Значит можно в этом же окне смотреть:
1. Если поменялся фокус, то следить чтобы он не вышел за пределы панели.
2. Если нажата комбинация Ctrl+Tab, то передовать фокус следующей панели.

Вот такие мысли.

Есть у кого ещё какие либо идеи/замечания по реализации задачи?

Спасибо за внимание!


Название: Re: Переключение фокуса. Tab внутри виджета, Ctrl-Tab - между виджетами.
Отправлено: Bepec от Июля 03, 2012, 09:14
Походу эта неделя богата на желающих скопировать оперу :D

Самое простое на мой взгляд - перехват нажатия и отсылка сигнала. А там уже что хошь то и делай.


Название: Re: Переключение фокуса. Tab внутри виджета, Ctrl-Tab - между виджетами.
Отправлено: OKTA от Июля 03, 2012, 09:18
Да!!! перехватывать события это крайне увлекательно!! =D


Название: Re: Переключение фокуса. Tab внутри виджета, Ctrl-Tab - между виджетами.
Отправлено: vertus от Июля 03, 2012, 09:19
Походу эта неделя богата на желающих скопировать оперу :D

Это опера украла мою идею!!!! :D На самом деле никогда не юзал её. :)

Цитировать
Самое простое на мой взгляд - перехват нажатия и отсылка сигнала. А там уже что хошь то и делай.

Сейчас вспоминаю, что есть проблема с последовательностью фокуса. Т.е. qt по умолчанию делает setTabOrder и поэтому когда внутри панелки пытаешься выставить на первый виджет фокус при следующей смене qt опять вернет его следующему виджету после последнего.


Название: Re: Переключение фокуса. Tab внутри виджета, Ctrl-Tab - между виджетами.
Отправлено: Bepec от Июля 03, 2012, 09:27
Сейчас вспоминаю, что есть проблема с последовательностью фокуса. Т.е. qt по умолчанию делает setTabOrder и поэтому когда внутри панелки пытаешься выставить на первый виджет фокус при следующей смене qt опять вернет его следующему виджету после последнего.
Кхм. Ясли сено топор? А попонятнее написать с применением разума? :)


Название: Re: Переключение фокуса. Tab внутри виджета, Ctrl-Tab - между виджетами.
Отправлено: vertus от Июля 03, 2012, 09:30
Смотри. Есть две панельки. На одном три контрола, пронумеруем их 1, 2, 3 и на втором три - 4, 5, 6.

Если после 3 -го контрола я возвращаю фокус на 1, то при следующем нажатии qt вернет фокус на 4-ый.


Название: Re: Переключение фокуса. Tab внутри виджета, Ctrl-Tab - между виджетами.
Отправлено: Bepec от Июля 03, 2012, 09:34
Чегой то у тебя не того. По идее Qt начинает считать согласно таб ордеру. Там только проедыдущий и следущий виджет есть. Видимо у тебя там что-то не так :)


Название: Re: Переключение фокуса. Tab внутри виджета, Ctrl-Tab - между виджетами.
Отправлено: OKTA от Июля 03, 2012, 09:35
А чего вручную порядок не задавать для пущей надежности?


Название: Re: Переключение фокуса. Tab внутри виджета, Ctrl-Tab - между виджетами.
Отправлено: vertus от Июля 03, 2012, 09:37
Да хочется поменьше напильником работать.