Russian Qt Forum
Ноябрь 22, 2024, 12:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: прикрепить виджеты к заданным участкам изображения (с масштабированием)  (Прочитано 7725 раз)
Novicheck
Гость
« : Апрель 21, 2015, 16:10 »

доброго времени суток!
прошу помощи у имеющих представление... задача состоит в том что на выводимом на главной форме изображении должны быть прикреплены в определенных точках изображения виджеты (скорей всего это будут QLabel), но как их разместить сохранив при этом привязку к определенной точке не могу никак сообразить. все дело в том что когда пользователь растягивает(сжимает) окно приложения, изображение соответственно масштабируется, а виджеты остаются разумеется на старых местах... а должны быть грубо говоря привязаны к точке на картинке и вместе с ней двигаться при масштабировании.
подскажите пожалуйста как или с помощью чего это можно реализовать
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Апрель 21, 2015, 16:15 »

Воспользуйтесь компоновщиками: QVBoxLayout, QHBoxLayout, QGridLayout и т.п.  Улыбающийся
Записан

Novicheck
Гость
« Ответ #2 : Апрель 21, 2015, 16:20 »

пробовал... не подходит.
при масштабировании все равно меняется расположение
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #3 : Апрель 21, 2015, 16:21 »

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

Код
C++ (Qt)
while(!asleep()) sheep++;
Novicheck
Гость
« Ответ #4 : Апрель 21, 2015, 16:28 »

именно эта мысль у меня и появилась первой, но дело в том что виджетов на изображении будет много (изображение - геогр.карта,  а виджеты - города), и соответственно расчет под каждого коэффициента очень трудоемко, надеюсь с Вашей коллективной помощью найти метод более продуктивный...)
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #5 : Апрель 21, 2015, 16:47 »

именно эта мысль у меня и появилась первой, но дело в том что виджетов на изображении будет много (изображение - геогр.карта,  а виджеты - города), и соответственно расчет под каждого коэффициента очень трудоемко, надеюсь с Вашей коллективной помощью найти метод более продуктивный...)
коэффициент расчитывается один раз при ресайзе. И при новом ресайзе еще раз расчитывается. В остальное время всё остаётся на своих местах. Проще некуда, и трудоёмкость минимальная.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #6 : Апрель 22, 2015, 09:02 »

Может проще задействовать графическую сцену? Там все само за вас будет рассчитывать. Да и быстрее рисоваться.
Записан
Novicheck
Гость
« Ответ #7 : Апрель 22, 2015, 09:09 »

хорошая мысль, спасибо))
надо покопать в эту сторону
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Апрель 22, 2015, 09:35 »

именно эта мысль у меня и появилась первой, но дело в том что виджетов на изображении будет много (изображение - геогр.карта,  а виджеты - города), и соответственно расчет под каждого коэффициента очень трудоемко, надеюсь с Вашей коллективной помощью найти метод более продуктивный...)
Что трудоемко-то? Так или иначе Вы имеете позицию каждого виджета - иначе его негде отрисовать. Ну и храните эту позицию в релятивных координатах от 0.0 до 1.0 и при ресайзе домножайте на width()/height() базовой картинки - вот и все

хорошая мысль, спасибо))
надо покопать в эту сторону
Что тут хорошего? Потратить тонны ресурсов для решения простейшей задачи. Или я чего-то не понял
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #9 : Апрель 23, 2015, 09:24 »

Какие тонны ресурсов если на сцене будет с десяток итемов. Хотя если виджеты на сцене часто обновляться будут, то скорее всего действительно производительность просядет в разы.
Тут конкретно от задачи зависит.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #10 : Апрель 23, 2015, 09:44 »

Быть может вам создать класс-наследник, у которого координаты положения будут в % картинки. Наделить их слотами, которые будут дёргаться при ресайзе, а в них пересчёт из % в реальную позицию.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #11 : Апрель 23, 2015, 09:45 »

Ну да, как Игорь сказал.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.154 секунд. Запросов: 22.