Обработка события перемещения |
Здравствуйте, гость ( Вход | Регистрация )
Обработка события перемещения |
ars |
12.4.2010, 18:50
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 16.2.2010 Пользователь №: 1467 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день!
Не могу понять как обработать событие перемещения виджета. Как следует из документации (и из экспериментирования ) moveEvent() посылается только при перемещении виджета относительно родителя. А что если мне нужно позиционировать popup окно (наподобие меню), которое должно изменять положение при перемещении главного окна (естественно при этом виджет, за которым должно следовать popup окно относительно главного окна не движется). Кто-нибудь знает как это сделать? Заранее благодарен. |
|
|
Litkevich Yuriy |
12.4.2010, 19:52
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
если главное окно является родителем (parent) для виджета, то можно в этом виджете на родителя повесить фильтр событий. В обработчике фильтра смотреть тип события. Если это событие перемещения, то значит главное окно переместилось. У события можно спросить разницу координат, и на эту разницу подвинуть всплывающее окно.
|
|
|
ars |
12.4.2010, 20:24
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 16.2.2010 Пользователь №: 1467 Спасибо сказали: 0 раз(а) Репутация: 0 |
если главное окно является родителем (parent) для виджета, то можно в этом виджете на родителя повесить фильтр событий. В обработчике фильтра смотреть тип события. Если это событие перемещения, то значит главное окно переместилось. У события можно спросить разницу координат, и на эту разницу подвинуть всплывающее окно. Если так подходить, то и фильтр не нужен, я же свой виджет пишу, можно просто event() переопределить в дочернем окне и все. Вопрос в другом, я не совсем понимаю, какое из событий из enum QEvent::Type за это отвечает. Думается, что так как во многих виджетах есть popup окна, то для него должен быть отдельный обработчик, разве нет? Да и кроме того, а если у меня таких родителей несколько? MainWindow, ToolBox и еще мой виджет, а потом от него уже popup меню, то на все 3 родителя вешать обработчики? Вроде как QComboBox и без этого работает в любой иерархии. По сути мой виждет очень похож на ComboBox, только в нем элементы графического вида... |
|
|
Litkevich Yuriy |
12.4.2010, 20:42
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Да и кроме того, а если у меня таких родителей несколько? у виджета не может быть несколько родителей.я же свой виджет пишу, можно просто event() переопределить в дочернем окне и все не понял, в каком дочернем окне? во всплывающем списке? а как узнаешь смещение координат главного окна?Вроде как QComboBox и без этого работает в любой иерархии сравнение про QComboBox совершенно не понял
|
|
|
ars |
12.4.2010, 20:52
Сообщение
#5
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 16.2.2010 Пользователь №: 1467 Спасибо сказали: 0 раз(а) Репутация: 0 |
Несколько родителей -- в смысле не прямых родителей Ну например, я открываю ComboBox, после этого могу перемещать тулбар на котором он расположен или главное окно, а выпадающий список этого ComboBox'a всегда следует за самим ComoBox'ом.
По поводу сравнения. Мне нужен виджет, который работает так же как ComboBox, но содержит не текст с иконками, а картинки и некоторый дополнительный функционал. Наследую я от класса QWidget и реализую вручную все необходимые методы. Вопрос в том, как мне добиться такого же поведения моего всплывающего меню, какое у ComboBox я описал в предыдущем абзаце. Обычно это реализуется за счет переопределения в самом меню обработчика события перемещения окна родителя. Какой метод в этом меню при этом вызывается, или какое событие из enum QEvent::Type за это отвечает? |
|
|
Litkevich Yuriy |
12.4.2010, 22:04
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Видимо я не правильно понял эту фразу:
естественно при этом виджет, за которым должно следовать popup окно относительно главного окна не движется Я подумал, что виджет стоит на месте, движется главное окно и за ним нужно перемещать всплывающий/выпадающий список/окно.Собственно в твоём виджете ставишь фильтр событий на всплывающее окно и всё, так сделано и в QComboBox'е (можно посмотреть его исходник). |
|
|
ars |
12.4.2010, 22:16
Сообщение
#7
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 16.2.2010 Пользователь №: 1467 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
Litkevich Yuriy |
13.4.2010, 4:36
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Текстовая версия | Сейчас: 28.1.2025, 17:14 |