Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: setFocus() grabKeyboard() фокус, мигающий курсор
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
kwisp
народ если кто сталкивался.
программа - это виджет на весь экран на нем менеджер размещения один из элементов браузер QtWebKit.
программа стартует предлагая ввести логин и пароль в диалоговое окно после удачного логина диалог скрывается и стартует загрузка странички в браузере, страничка содержит в себя поля ввода на них фокус автоматически не устанавливается(важно). после загрузки странички на страничке фокус есть и по табуляции он переходит от элемента странички к элементу, проблема в том что не отображается мигающая полосочка показывающая куда будет вводиться следующий символ. хотя сами символы благополучно попадают в поле ввода.:( полосочка появляется если сменить фокус вручную. т.е. нажать к примеру альтаб а потом вернуться обратно и полосочка мигает.... странность однако.
ViGOur
Такое ощущение, что в данном случае проблемы с отрисовкой.
kwisp
ViGOur, я проверял даже после загрузки браузера посылал ему с помощью sendEvent() QShowEvent и результат тотже. я считаю что эта штука присутствует в qt в связи с тем что возможно события клавиотуры принимает браузер а фокус ввода на каком либо другом виджете. проблему естественно я уже решил() желаемая мигающая полоска появляется(я управляю фокусом в браузере из программы с помощью яваскрипта на страничке который устанавливает фокус куда мне нужно). однако все же интересно куда она девается при первой загрузке ???....
kwisp
наткнулся на нудную неинтересную вещь.
получилось так что после того как делаешь show() главному окну получаешь последнее со всеми дочерними виджетами на экране. тут как я понял из документации срабаотывает некий менеджер установки фокуса, который ставит фокус ввода с клавиотуры подходящему виджету. при том что он работает не в обработчике showEvent() в других потрохах.

Цитата
if focus has never been in this window before and you know where focus should start out, call QWidget::setFocus() on the widget which should receive focus before you call QWidget::show() it. If you don't, Qt will pick a suitable widget.


setFocus() по ходу получается что устанавливает фокус на виджет при следующем его показе.!!! а не сразу

добился того чтобы в поле ввода странички браузера появилась каретка(текстовый курсор ввода)
тем что в обработчике сигнала браузера loadFinished(bool)
вызвал один за другим два метода
this->setFocus();
this->show();

достаточно сделать при первой загрузке браузера и каретка станет появляться.
вообще для себя понял что фокус одна из самых скользких тем в Qt. почему то всегда с ней проблемы и неясности.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.