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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QGraphicsView - вывести изображение под виджет  (Прочитано 14044 раз)
bez_glaz
Гость
« : Март 05, 2012, 12:54 »

Добрый день.
Нужен совет, как более правильно cделать или может есть стандартный способ.
Использую такой код
Код:
    
    QGraphicsScene * scen = new QGraphicsScene();
    QPixmap * pix = new QPixmap();
    pix->load("qqq.png");
    scen->addPixmap(*pix);
    ui->Mnemo->setScene(scen);
    //Mnemo - компонент QGraphicsView
Всё корректно без ошибок, но когда начинаю "играться" с окном формы, изображение сохраняет свой прежний размер, только появляются ScrollBar'ы. Надо чтоб изображение под виджет подстраивалось.
А вот с чем работать даже теряюсь, с  QGraphicsScene, QPixmap или QGraphicsView?
С чем будит легче или корректнее работать в этом направлении ?
« Последнее редактирование: Март 05, 2012, 13:24 от bez_glaz » Записан
Bepec
Гость
« Ответ #1 : Март 05, 2012, 13:14 »

Эм. Сокращая до пары предложений:

"У меня есть картинка, я её добавил. А она, гадкая, не ресайзится сама."

Ответ: нужно самому ресайзить, или доверить работу своему классу.
Записан
bez_glaz
Гость
« Ответ #2 : Март 05, 2012, 13:18 »

Просьба читать внимательнее посты. Если раздел форума "для новичков" не надо на отмаш бомбить ответы.
Уточняю свой вопрос - к какому классу(QGraphicsScene, QPixmap или QGraphicsView) будит лучше применять те или иные действия, что бы был "автосайз" по виджету.
Под словом "лучше" я понимаю какие-нибудь классические решения.
Записан
Bepec
Гость
« Ответ #3 : Март 05, 2012, 13:21 »

Хм. А я не наотмаш бомблю однако. Я читаю и анализирую.

Куда вам эту картинку надо? Что над виджетом будет? Что представляет собой ваш виджет?

Самый простой вариант QPixmap на задний фон и усё.
Записан
bez_glaz
Гость
« Ответ #4 : Март 05, 2012, 13:27 »

Хм. А я не наотмаш бомблю однако. Я читаю и анализирую.

Куда вам эту картинку надо? Что над виджетом будет? Что представляет собой ваш виджет?

Самый простой вариант QPixmap на задний фон и усё.
Всё до примитива просто - форма с виджетом  QGraphicsView, вывод картинки я описал в первом посте. Надо чтоб изображение растягивалось или сжималось, по изменению формы. Что значит
Цитировать
Самый простой вариант QPixmap на задний фон и усё.
вообще не понял. Background обеспечивает автоматическое сжатие\растягивание ?
Записан
Bepec
Гость
« Ответ #5 : Март 05, 2012, 13:34 »

Нет. Скорее всего в Qt нет виджета с функцией "авторастягивания".

Потому самым простым, видимым мне вариантом, является QPixmap, автоматически изменяемый при каждом ресайзе виджета.

Если же у вас уже используется QGraphicsView, то возможно есть элемент с таким функционалом, который можно будет поместить на него. Но при этом придётся перехватывать/или не обрабатывать все события, связанные с вашим задником.

« Последнее редактирование: Март 05, 2012, 13:39 от Bepec » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Март 05, 2012, 13:46 »

Потому самым простым, видимым мне вариантом, является QPixmap, автоматически изменяемый при каждом ресайзе виджета.
Может и простой, но самый отвратительный.

Надо чтоб изображение под виджет подстраивалось.
См. здесь или здесь.
Записан

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #7 : Март 05, 2012, 13:50 »

Ну. Отвратительный не отвратительный, но костыль.

Да, про painter я чтот даж не подумал, хотя одно и то же Подмигивающий
Записан
BRE
Гость
« Ответ #8 : Март 05, 2012, 13:57 »

2bez_glaz Ты хочешь, что бы сцена все время масштабировалась под размер виджета? При увеличении окна - увеличивались и объекты сцены?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Март 05, 2012, 13:59 »

Ну. Отвратительный не отвратительный, но костыль.

Да, про painter я чтот даж не подумал, хотя одно и то же Подмигивающий
Совсем не одно и тоже!
При изменении размера виджета нужно будет пере-создавать пиксмап, который является довольно-таки тяжелым ресурсом и хранится на стороне Х-сервера или GDI (omg - сколько же раз я это уже говорил здесь). Насколько это оптимально - выводы делай сам.
Записан

Qt 5.11/4.8.7 (X11/Win)
bez_glaz
Гость
« Ответ #10 : Март 06, 2012, 08:21 »

2bez_glaz Ты хочешь, что бы сцена все время масштабировалась под размер виджета? При увеличении окна - увеличивались и объекты сцены?

Да именно так.
Записан
Bepec
Гость
« Ответ #11 : Март 06, 2012, 08:29 »

ппц...
вначале - картинку на фоне хочу с маштабированием.
конец - хочу чтоб все объекты на сцене пропорционально масштабировались.
Записан
bez_glaz
Гость
« Ответ #12 : Март 06, 2012, 08:30 »

ппц...
вначале - картинку на фоне хочу с маштабированием.
конец - хочу чтоб все объекты на сцене пропорционально масштабировались.
Картинку на фоне???
А ну давай укажи мне, где я это писал Непонимающий??
Записан
BRE
Гость
« Ответ #13 : Март 06, 2012, 08:45 »

Да именно так.
У QGraphicsView есть метод fitInView, его можно вызывать из обработчика resizeEvent.
Записан
Bepec
Гость
« Ответ #14 : Март 06, 2012, 08:54 »

Цитировать
Уточняю свой вопрос - к какому классу(QGraphicsScene, QPixmap или QGraphicsView) будит лучше применять те или иные действия, что бы был "автосайз" по виджету.

Во всяком случае про "ресайз всех элементов на сцене" по этой реплике можно только догадаться. Подмигивающий
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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