crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Обработка события перемещения
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 13.4.2010, 4:36
 
Цитата(ars @ 13.4.2010, 2:16) *
А на какое событие из enum QEvent::Type
тыж сам написал что тебя интересует
Цитата(ars @ 12.4.2010, 22:50) *
moveEvent()
этот тип и бери
ars Дата 12.4.2010, 22:16
 
Цитата(Litkevich Yuriy @ 12.4.2010, 23:04) *
Собственно в твоём виджете ставишь фильтр событий на всплывающее окно и всё, так сделано и в QComboBox'е (можно посмотреть его исходник).


А на какое событие из enum QEvent::Type фильтр ставить, которое из них за перемещение отвечает?
Litkevich Yuriy Дата 12.4.2010, 22:04
  Видимо я не правильно понял эту фразу:
Цитата(ars @ 12.4.2010, 22:50) *
естественно при этом виджет, за которым должно следовать popup окно относительно главного окна не движется
Я подумал, что виджет стоит на месте, движется главное окно и за ним нужно перемещать всплывающий/выпадающий список/окно.

Собственно в твоём виджете ставишь фильтр событий на всплывающее окно и всё, так сделано и в QComboBox'е (можно посмотреть его исходник).
ars Дата 12.4.2010, 20:52
  Несколько родителей -- в смысле не прямых родителей :) Ну например, я открываю ComboBox, после этого могу перемещать тулбар на котором он расположен или главное окно, а выпадающий список этого ComboBox'a всегда следует за самим ComoBox'ом.

По поводу сравнения. Мне нужен виджет, который работает так же как ComboBox, но содержит не текст с иконками, а картинки и некоторый дополнительный функционал. Наследую я от класса QWidget и реализую вручную все необходимые методы. Вопрос в том, как мне добиться такого же поведения моего всплывающего меню, какое у ComboBox я описал в предыдущем абзаце. Обычно это реализуется за счет переопределения в самом меню обработчика события перемещения окна родителя. Какой метод в этом меню при этом вызывается, или какое событие из enum QEvent::Type за это отвечает?
Litkevich Yuriy Дата 12.4.2010, 20:42
 
Цитата(ars @ 13.4.2010, 0:24) *
Да и кроме того, а если у меня таких родителей несколько?
у виджета не может быть несколько родителей.

Цитата(ars @ 13.4.2010, 0:24) *
я же свой виджет пишу, можно просто event() переопределить в дочернем окне и все
не понял, в каком дочернем окне? во всплывающем списке? а как узнаешь смещение координат главного окна?

Цитата(ars @ 13.4.2010, 0:24) *
Вроде как QComboBox и без этого работает в любой иерархии
сравнение про QComboBox совершенно не понял
ars Дата 12.4.2010, 20:24
 
Цитата(Litkevich Yuriy @ 12.4.2010, 20:52) *
если главное окно является родителем (parent) для виджета, то можно в этом виджете на родителя повесить фильтр событий. В обработчике фильтра смотреть тип события. Если это событие перемещения, то значит главное окно переместилось. У события можно спросить разницу координат, и на эту разницу подвинуть всплывающее окно.


Если так подходить, то и фильтр не нужен, я же свой виджет пишу, можно просто event() переопределить в дочернем окне и все. Вопрос в другом, я не совсем понимаю, какое из событий из enum QEvent::Type за это отвечает. Думается, что так как во многих виджетах есть popup окна, то для него должен быть отдельный обработчик, разве нет?

Да и кроме того, а если у меня таких родителей несколько? MainWindow, ToolBox и еще мой виджет, а потом от него уже popup меню, то на все 3 родителя вешать обработчики? Вроде как QComboBox и без этого работает в любой иерархии. По сути мой виждет очень похож на ComboBox, только в нем элементы графического вида...
Litkevich Yuriy Дата 12.4.2010, 19:52
  если главное окно является родителем (parent) для виджета, то можно в этом виджете на родителя повесить фильтр событий. В обработчике фильтра смотреть тип события. Если это событие перемещения, то значит главное окно переместилось. У события можно спросить разницу координат, и на эту разницу подвинуть всплывающее окно.
ars Дата 12.4.2010, 18:50
  Добрый день!

Не могу понять как обработать событие перемещения виджета. Как следует из документации (и из экспериментирования :) ) moveEvent() посылается только при перемещении виджета относительно родителя. А что если мне нужно позиционировать popup окно (наподобие меню), которое должно изменять положение при перемещении главного окна (естественно при этом виджет, за которым должно следовать popup окно относительно главного окна не движется). Кто-нибудь знает как это сделать? Заранее благодарен.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 17:42