crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Таскаю картинку мышой по форме.
SABROG
  опции профиля:
сообщение 12.5.2009, 13:12
Сообщение #1


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

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Смысл простой. Есть картинка (QPixmap) размером больше, чем окошко (QWidget). Я пытаюсь сделать таскалку (dragging) для неё.

В процессе реализации стало нужным ограничить область таскания размерами картинки. Т.е. если я пытаюсь тащить мышку за область перед картинкой или после, то я вижу серый фон и углы картинки, а стало быть надо ограничить этот скроллинг. Сделал так:

/*если позиция X с которой надо копировать картинку в paintEvent'e + ширина окна = больше чем размер картинки.
т.е. вылазит за пределы видимой области - откатываем эту позицию назад до тех пор, пока оставшаяся часть картинки
не будет влазить целиком в окно
*/
        if (pos.x()+rect().width() >= picture.width())
            pos.setX(picture.width()-rect().width());

/*
тоже самое для Y
*/
        if (pos.y()+rect().height() >= picture.height())
            pos.setY(picture.height()-rect().height());

// это вообще для левой верхней позиции. Если пытаемся скопировать с отрицательной позиции (там где картинки нет, то копируем с нуля).
        pos.setX(qMax(pos.x(), 0));
        pos.setY(qMax(pos.y(), 0));


В итоге это выглядит так:
Раскрывающийся текст




А до этого было такое:
Раскрывающийся текст




Вопрос в том как это вообще обычно делается. Как-то все это выглядит некрасиво, overhead'но.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.5.2009, 13:16
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(SABROG @ 12.5.2009, 17:12) *
Вопрос в том как это вообще обычно делается.
у меня почти такая же задачка, я решил пример svgviewer переделать. Только эту задачку я на потом оставил. Я сейчас над увеличением выделенной области думаю.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 12.5.2009, 13:31
Сообщение #3


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

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(Litkevich Yuriy @ 12.5.2009, 14:16) *
Цитата(SABROG @ 12.5.2009, 17:12) *
Вопрос в том как это вообще обычно делается.
у меня почти такая же задачка, я решил пример svgviewer переделать. Только эту задачку я на потом оставил. Я сейчас над увеличением выделенной области думаю.

Ну с увеличением у меня проблем небыло, т.к. если в тот же drawPixmap передавать разную высоту и ширину target и source, то картинка автоматически увеличивается или уменьшаяется.

Цитата
Note: The pixmap is scaled to fit the rectangle, if both the pixmap and rectangle size disagree.


Правда вчера эксперименты с setVewport привели к крашу моего приложения в методе scale внутри библиотеки. Надо быть осторожным в передаваемых размерах rect'ов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.4.2024, 20:16