Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: StogovOleg от Сентябрь 23, 2007, 10:17



Название: Борьба с фокусом
Отправлено: StogovOleg от Сентябрь 23, 2007, 10:17
Доброго всем времени суток.

Разрабатываю плугин (qt3.3.3) для ввода числового значения с контролем его принадлежности заданным (нескольким) допустимым диапазонам.
При вводе значения не вошедшего ни в один диапазон нужно запретить выход из компоненты (т.е. работу со всеми остальными элементами интерфейса). В слоте, соединенным с сигналом LostFocus, проверяю допустимость введенного значения и в случае недопустимости делаю this->setFocus().
Это не позволяет перейти в QLineEdit, но при этом разрешает нажатие кнопок на форме, раскрытие списков комбобоксов и выбор их элементов, переход по закладкам QTabWidget ..., и соответственно отрабатывает код их слотов.
Как локализовать компонент в случае недопустимого введенного значения?


Название: Re: Борьба с фокусом
Отправлено: pastor от Сентябрь 23, 2007, 19:08
Может чем-то поможет QWidget::grabMouse()

Цитировать
Grabs the mouse input.
This widget receives all mouse events until releaseMouse() is called; other widgets get no mouse events at all. Keyboard events are not affected. Use grabKeyboard() if you want to grab that.

и QWidget::grabKeyboard()

Цитировать
Grabs the keyboard input.
This widget reveives all keyboard events until releaseKeyboard() is called; other widgets get no keyboard events at all. Mouse events are not affected. Use grabMouse() if you want to grab that.
The focus widget is not affected, except that it doesn't receive any keyboard events. setFocus() moves the focus as usual, but the new focus widget receives keyboard events only after releaseKeyboard() is called.
If a different widget is currently grabbing keyboard input, that widget's grab is released first.