Здравствуйте, гость ( Вход | Регистрация )
kwisp | Дата 20.4.2010, 11:09 |
Т.е. leaveEvent(QEvent*) уже отработал, но это ни к чему не должно приводить я это и имел ввиду. в leaveEvent(QEvent*) устанавливать флаг - мышь за пределами виджета в enterEvent(QEvent*) сбрасывать. grabMouse() передаст щелчки мыши в желаемый виджет, в обработчиках щелчков мы будем проверять флаг и в соответсвии со значением действовать. |
|
Litkevich Yuriy | Дата 20.4.2010, 10:03 |
можно добавить обработку события покидания виджета - leaveEvent(QEvent*) если я правильно понял автора, то у него виджет изначально не в фокусе и мышь в нём бывает редко, но некие действия должны происходить именно по щелчку мыши. Т.е. leaveEvent(QEvent*) уже отработал, но это ни к чему не должно приводитьполучается сможешь поймать щелчок за пределами виджета простой установкой флага в leaveEvent(QEvent*) |
|
kwisp | Дата 20.4.2010, 7:38 |
ars, к предложенному варианту BRE Если хочется получать все события от мышки, даже когда она за пределами виджета, то посмотри на: void QWidget::grabMouse () можно добавить обработку события покидания виджета - leaveEvent(QEvent*) получается сможешь поймать щелчок за пределами виджета простой установкой флага в leaveEvent(QEvent*) |
|
BRE | Дата 20.4.2010, 7:09 |
Если хочется получать все события от мышки, даже когда она за пределами виджета, то посмотри на: void QWidget::grabMouse () Так же советую посмотреть как подобный функционал реализован в Qt, например, как это сделано у QToolTip или QComboBox. |
|
ars | Дата 19.4.2010, 22:57 |
0.о Кошмар Интересно, стоит считать эти 2 варианта несовершенством Qt или просто отсутствием необходимости делать то, что я предложил.... |
|
Litkevich Yuriy | Дата 19.4.2010, 22:52 |
Он собирается перерисовываться и скрывать дочерние элементы ну тогда, могу такой вариант предложить, коль скоро фокуса может вовсе не иметь:1) Использовать стороннюю библиотеку Qxt, в ней есть глобальная работа с событиями клавиатуры и мыши 2) с использованием только Qt, не уверен, что получится a)в своём виджете заполучить указательна окно, в котором он помещён (циклически перебрать родителей) b )узнать у окна геометрию c)наложить на окно прозрачный виджет d)сделать этот виджет одновременно и прозрачным для мыши и обрабатывающим события мыши (не уверен в этом месте, возможны ли оба варианта) |
|
ars | Дата 19.4.2010, 22:44 |
Он собирается перерисовываться и скрывать дочерние элементы Мне кажется, что поле представляет из себя со списком единый виджет, хотя кто знает разработчиков Opera |
|
Litkevich Yuriy | Дата 19.4.2010, 22:41 |
значит фокус не теряется не теряется у кого? у выпадающего списка или поля ввода ты ответь на вопрос Что твой виджет собирается делать с событием "щелчок", которое будет иметь координату уходящую за пределы самого виджета? тогда и решение придёт быстрее. |
|
ars | Дата 19.4.2010, 22:19 |
По поводу потери фокуса -- сомневаюсь. Простой пример, пользуюсь браузером Opera. Там есть панель адреса, если список в ней открыть, то она получает фокус, если после этого кликнуть на свободной части панели, то список закроется, но курсор все равно будет мигать в строке набора адреса, значит фокус не теряется И притом, а делать, если элемент не должен вообще фокус получать? Хотя можно конечно обработать потерю фокуса так хитро, чтобы он не терялся Но что при этом делать с элементами у которых не должно быть фокуса -- не понятно... |
|
Litkevich Yuriy | Дата 19.4.2010, 21:38 |
закрытие в ComboBox'е списка при клике на любую часть экрана. это событие потери фокуса, для общего случая на него не стоит ориентироватьсязадача вроде сформулирована чётко, однако откуда растут ноги не понятно. Что твой виджет собирается делать с событием "щелчок", которое будет иметь координату уходящую за пределы самого виджета? |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 10:19 |