QGraphicsPixmapItem c "фенечками" |
Здравствуйте, гость ( Вход | Регистрация )
QGraphicsPixmapItem c "фенечками" |
Elfinit |
25.7.2009, 16:29
Сообщение
#1
|
Участник Группа: Участник Сообщений: 127 Регистрация: 17.3.2009 Из: Казань Пользователь №: 619 Спасибо сказали: 7 раз(а) Репутация: 1 |
Есть QGraphicsScene, на которой куча ThumbnailItem'ов - наследников QGraphicsPixmapItem.
Под каждым из которых может выводиться список "интерактивных элементов". Как пример - пиктограмм фотобанков, на которые была отправлена фотка. Отрисовывать их как обычные QPixmap в ThumbnailItem::paint не составляет труда, НО - они должны быть "интерактивными". Т.е., как минимум, должны реагировать на наведение на них курсора, показывая некий тултип. А в идеале - реагировать на нажатие, запрос контекстного меню и т.п. Эти "фенечки" должны быть жёстко привязаны к своему ThumbnailItem, так что вариант делать их самих QGraphicsItem - ооочень сложно реализуем. Т.к. координаты их зависят от своего THumbnailItem, "информационная нагрузка" - тоже. К тому же, сцена иногда меняет режим отображения и все ThumbnailItem'ы нужно скрыть, так что "фенечки" должны изчезать вместе с ними. Другой пример сложности реализации их как независимого QGraphicsItem - ресайз сцены или резайз самих эскизов. См. скриншот, там внизу сцены ползунок, которым можно регулировать размер эскизов. Так что нужна жёсткая привязка этих штучек к ThumbnailItem. Есть какие-нить соображения?) |
|
|
ufna |
25.7.2009, 16:44
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 362 Регистрация: 24.5.2008 Из: Курган/СПб Пользователь №: 182 Спасибо сказали: 29 раз(а) Репутация: 5 |
опять таки, варианта два:
1. Классический, не побоюсь этого слова. Так делалось все гуи в компьютерных игрушкас с давних пор и до сих пор, пока не придумали гуи для опенГЛ и директХ "для ленивых". Да и сейчас так же, только в более серьезное степени все это сделано, но основа - та же самая. Рисуем вручную, пеинтером. При отрисовке - заполняем массив QRect - области, где висят у тебя айтемы. Айтемы представляют из себя структуру/класс/да как хочешь, которая рисуется в зависимости от некоторых условий (можно делать и не классом, но так удобнее). У каждого айтема - три стейта: обычное состояние, нажатое состояние, состояние "в фокусе". В мувЭвенте класса вот этого главного проходим по списку прямоугольников, смотрим "на какой попали" - меняем стейт. То же самое в пресс эвенте и релиз - в одном - делаем стейт "нажато", в другом - "нормально". С тултипом - аналогичные вещи (пусть текст тултипа - хранится в классе). Меню - то же самое. Перемещение, ресайз, поворот - все это легко реализуется этими вещами. Я сейчас на этой основе проект по печати фото делаю, могу показать как это работает и код главного "рисовальщика". Главное не забывать про двойную буферизацию и время для "update(<нужный рект>)". 2. Вариант через GVC. Реализуется все точно таким же образом. Делаешь наследника класса график айтем, у него переопределяешь нужные эвенты, никаких проблем я вообще не вижу. Масштаб вообще проблем не представляет, ресайз - тоже. Ловишь нужные эвенте, перестраиваешь "на лету" положения и размер сиих кусочков, и все. Все эти как ты сказал "штучки" - рисоваться будут от системы координат айтема, а его пеинт эвенте, если сделаешь правильно. То же самое - могу привести пример из собственного опыта работы с GVC. Сообщение отредактировал ufna - 25.7.2009, 17:13 |
|
|
Текстовая версия | Сейчас: 22.12.2024, 12:21 |