Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: iroln от Май 29, 2012, 15:15



Название: [РЕШЕНО] Как таскать сцену, если курсор внутри айтема?
Отправлено: iroln от Май 29, 2012, 15:15
Всем привет!

Описываю проблему.

Дано (смотрите картинку):
QGraphicsView
QGraphicsScene
QGraphicsRectItem

У QGraphicsView включен режим DragMode = ScrollHandDrag
У QGraphicsRectItem флаг ItemIsMovable = false

Что хочу:
Хочу таскать мышкой вид над сценой, если курсор находится внутри айтема. Проблема: не тащится. :)
То есть, другими словами, если у айтема снят флаг Movable, как сделать его "прозрачным", то есть как заставить Qt его игнорировать, никак не учитывать при таскании внутри вида?

Перепробовал для QGraphicsRectItem setEnable(false), setActive(fasle), ItemIsMovable = false, ItemIsFocusable = false, setAcceptedMouseButtons(Qt.NoButton) - ничего не помогает!


Название: Re: Как таскать сцену, если курсор внутри айтема?
Отправлено: iroln от Май 29, 2012, 15:55
Небольшое уточнение.

При попытке схватить сцену и протащить, когда курсор внутри айтема, то происходит сброс DragMode у QGraphicsView на NoDrag. Попробовал навесить eventFilter и выставлять руками
Код
C++ (Qt)
view->setDragMode(QGraphicsView::ScrollHandDrag)
Не помогает, курсор меняется на "руку", но вид не шевелится. Что за бред на ровном месте.
Нафига неактивный айтем забирает на себя управление и не даёт ничего сделать? Ненавижу Qt :(


Название: Re: Как таскать сцену, если курсор внутри айтема?
Отправлено: iroln от Май 29, 2012, 16:58
Похоже, это мой косяк. Проблема наблюдается только с моей собственной реализацией сцены. :(


Название: Re: Как таскать сцену, если курсор внутри айтема?
Отправлено: mks от Май 30, 2012, 00:44
...
Что хочу:
Хочу таскать мышкой вид над сценой, если курсор находится внутри айтема. Проблема: не тащится. :)
То есть, другими словами, если у айтема снят флаг Movable, как сделать его "прозрачным", то есть как заставить Qt его игнорировать, никак не учитывать при таскании внутри вида?
...
Вы хотите таскать сцену только тогда когда курсор внутри вашего серого прямоугольника ? Я с трудом улавливаю ход вашей мысли. Устроит ли такой вариант: левая кнопка мыши таскает объекты по сцене, а правая всю сцену внутри вида ?


Название: Re: Как таскать сцену, если курсор внутри айтема?
Отправлено: iroln от Май 30, 2012, 20:51
Вы хотите таскать сцену только тогда когда курсор внутри вашего серого прямоугольника ? Я с трудом улавливаю ход вашей мысли. Устроит ли такой вариант: левая кнопка мыши таскает объекты по сцене, а правая всю сцену внутри вида ?
Ход моих мыслей незатейлив. Мне надо было таскать вид над сценой, когда курсор находился где угодно. Я сам накосячил, о чём и написал. В моей унаследованной сцене в методах обработки событий мыши была ошибка, которая отключала DragMode для текущего вида если курсор попадал в область любого айтема. В общем, уже всё нормально, и я посыпаю голову пеплом. :)

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