Russian Qt Forum
Ноябрь 24, 2024, 06:22
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Куда падает айтем?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Куда падает айтем? (Прочитано 2150 раз)
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Куда падает айтем?
«
:
Февраль 02, 2015, 13:37 »
Надо поправить одну старую непонятку, раньше махнули на неё рукой, не мешало сильно.
Когда выполняется drah-n-drop айтема, лежавшего на сцене, айтем "в воздухе" рисуется относительно позиции курсора, а не на своих бывших координатах. То есть, при умолчательных значения координат он "отпрыгивает" от сцены, и повисает правее и ниже курсора. Ну это ладно, пусть. Но когда айтем падает на сцену, я принимаю QGraphicsSceneDragDropEvent *event, и беру оттуда event->scenePos() и использую эту позицию, как новые координаты на сцене, то айтем попадает не точно в то место, над которым он перед этим "висел". Он смещается немного влево и вверх. Есть такое ощущение, что он смещается на... размеры курсора. Что в общем, выглядит логично - курсор же исчез, а при возяканьи координаты ивентов указываются для него. А нам надо, чтобы он падал точно туда, где был виден.
Как от этого быстро избавиться, плз, подскажите кто-нибудь. Сейчас надо много чего делать, и вспоминать где как там нужное смещение получить - ну просто... не с руки совершенно. Надо просто + коррекцию сделать, и закрыть тему. А может быть, дело не в курсоре, в чем-то другом.
И попутно еще проблема - не вижу, как простым способом поймать айтем, если он падает ни на одну из сцен, которая имеет "приемник" dropEvent(). То есть, если юзер потащил айтем, я его снимаю со сцены, и если его вытащили куда-то вбок и там бросили, мне надо его на сцену вернуть. Но в документации не вижу ничего про такой случай. Единственный вариант просматривается - ловить события в главном приложении и устраивать полный разбор, чтобы найти случай дропа именно этого айтема мимо именно этой сцены. Но это как-то очень не по Qt-шному.
(решено)
«
Последнее редактирование: Февраль 02, 2015, 17:48 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
ammaximus
Гость
Re: Куда падает айтем?
«
Ответ #1 :
Февраль 03, 2015, 00:06 »
Думаю проблема в системе координат самого айтема, возможно его центр не там, где вы ожидаете. В драгндроп роботе вроде все ровно, утром проверю как у меня
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Куда падает айтем?
«
Ответ #2 :
Февраль 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 иконка прямо под курсором может не ездить, а надо чтобы одинаково работало везде. Вариант - прибавить к координатам курсора его размеры, и там ронять иконку, тогда она будет падать тоже хорошо.
Но я уже полдня все свободное время ищу, как динамически определять размеры курсора. Не нашел.
Есть только вариант его перезагрузить, и использовать известные размеры.
«
Последнее редактирование: Февраль 03, 2015, 00:56 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...