crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Не вызывается moveEvent для дочерних объектов
dartan
  опции профиля:
сообщение 18.4.2013, 11:36
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 12.4.2013
Пользователь №: 3790

Спасибо сказали: 0 раз(а)




Репутация:   0  


Приветствую!
На QGraphicsScene есть родительский объект, который содержит несколько дочерних объектов. И родительский объект, и дочерние объекты унаследованы от QGraphicsWidget. Родительский объект можно перемещать мышкой, и мне нужно обрабатывать событие перемещения (moveEvent) в каждом дочернем объекте. Проблема в том, что это событие не вызывается в дочерних объектах, а только в родительском. Как решить?

P.S. Qt 5.0.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.4.2013, 12:12
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


dartan, нужно ловить в родителе и двигать детей. Но лучше тогда уж по уму сделать, раз у тебя прокси виджетов - клади детей на родительский виджет, а прокси получай только для родителя.

и на самом ли деле нужно использовать именно QGraphicsWidget ? Назови причины, почему ты выбрал этот класс
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dartan
  опции профиля:
сообщение 18.4.2013, 13:00
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 12.4.2013
Пользователь №: 3790

Спасибо сказали: 0 раз(а)




Репутация:   0  


Сразу скажу, что я в Qt новичок, поэтому могу путаться :rolleyes:
Цитата
dartan, нужно ловить в родителе и двигать детей.

Так дети и так двигаются, за родителем. В них нужно только ловить событие перемещения.
Цитата
раз у тебя прокси виджетов - клади детей на родительский виджет, а прокси получай только для родителя.

Имеется ввиду QGraphicsProxyWidget? Я его не использую для этих дочерних объектов, по крайней мере явно. Вот если добавляю QPushButton, например, там да, через прокси. А эти я просто делаю потомками родительского объекта и всё.
Цитата
и на самом ли деле нужно использовать именно QGraphicsWidget ? Назови причины, почему ты выбрал этот класс

Тут я уверенно сказать не могу. Qwidget сначала смутил меня тем, что нужно его использовать через прокси. А QGraphicsObject'а, наверное, будет недостаточно, потому что размещаю дочерние объекты на лэйаутах QGraphicsLayout. Вообще делаю что-то наподобие редактора блок-схем, только узловые элементы чуть сложнее.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.4.2013, 10:33
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


dartan,
Цитата(dartan @ 18.4.2013, 16:00) *
Так дети и так двигаются, за родителем. В них нужно только ловить событие перемещения.

всё верно, если ты положил на сцену QWidget, то его дети ведут себя точно так же, как на "обычном" виджете. Если хочешь известить детей о событии передвижения родителя, то в moveEvent родителя нужно перебрать всех детей и известить их

для редактора блок-схем QWidget не потребуется - я, например, прекрасно справился с подобным редактором при помощи QGraphicsItem и QGraphicsLineItem -элементов

есть ещё QGraphicsItemGroup класс для группировки элементов внутри себя - вот он тебе и нужен, наверное (мне он как-то не понадобился)

Использование QWidget-чайлдов на сцене оправдано только тогда, когда по некоторым причинам туда нужно затолкнуть элемент, работающий один в один как реальный виджет (например, часы, готовый ползунок, поле ввода или просто совместимость)

Сообщение отредактировал Алексей1153 - 19.4.2013, 10:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.4.2024, 13:27