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