Название: Куда падает айтем? Отправлено: Гурман от Февраль 02, 2015, 13:37 Надо поправить одну старую непонятку, раньше махнули на неё рукой, не мешало сильно.
Когда выполняется drah-n-drop айтема, лежавшего на сцене, айтем "в воздухе" рисуется относительно позиции курсора, а не на своих бывших координатах. То есть, при умолчательных значения координат он "отпрыгивает" от сцены, и повисает правее и ниже курсора. Ну это ладно, пусть. Но когда айтем падает на сцену, я принимаю QGraphicsSceneDragDropEvent *event, и беру оттуда event->scenePos() и использую эту позицию, как новые координаты на сцене, то айтем попадает не точно в то место, над которым он перед этим "висел". Он смещается немного влево и вверх. Есть такое ощущение, что он смещается на... размеры курсора. Что в общем, выглядит логично - курсор же исчез, а при возяканьи координаты ивентов указываются для него. А нам надо, чтобы он падал точно туда, где был виден. Как от этого быстро избавиться, плз, подскажите кто-нибудь. Сейчас надо много чего делать, и вспоминать где как там нужное смещение получить - ну просто... не с руки совершенно. Надо просто + коррекцию сделать, и закрыть тему. А может быть, дело не в курсоре, в чем-то другом. Название: Re: Куда падает айтем? Отправлено: ammaximus от Февраль 03, 2015, 00:06 Думаю проблема в системе координат самого айтема, возможно его центр не там, где вы ожидаете. В драгндроп роботе вроде все ровно, утром проверю как у меня
Название: Re: Куда падает айтем? Отправлено: Гурман от Февраль 03, 2015, 00:46 Не... Когда айтем драгается, на самом деле, ездит картинка, которая привязывается вызовом drag->setPixmap( QPixmap( pic ) ); где pic это картинка айтема на сцене, а drag это QDrag*. Картинка появляется справа внизу под курсором. При этом у drag координату "точки акцептуации" курсора можно установить с помощью QDrag::setHotSpot(). Это перемещает курсор в системе координат картинки. По идее, проблема решается вызовом drag->setHotSpot( QPoint(0,0) ); и в вениках так и работает. Но в документации написано:
Цитировать Note: on X11, the pixmap may not be able to keep up with the mouse movements if the hot spot causes the pixmap to be displayed directly under the cursor. Из чего следует, в X11 иконка прямо под курсором может не ездить, а надо чтобы одинаково работало везде. Вариант - прибавить к координатам курсора его размеры, и там ронять иконку, тогда она будет падать тоже хорошо. Но я уже полдня все свободное время ищу, как динамически определять размеры курсора. Не нашел. :( Есть только вариант его перезагрузить, и использовать известные размеры. |