Название: Масштабирование картинки на QLabel с сохранением отношения cx/cy Отправлено: sasha12345 от Август 17, 2012, 12:53 Здравтвуйте,
Как заставить QLabel при изменении его размеров масштабировать картинку с сохранением пропорции ширины к высоте? Название: Re: Масштабирование картинки на QLabel с сохранением отношения cx/cy Отправлено: lighting от Август 17, 2012, 13:01 Используй QPixmap scaled(). и флаг Qt::KeepAspectRatio
Название: Re: Масштабирование картинки на QLabel с сохранением отношения cx/cy Отправлено: sasha12345 от Август 17, 2012, 13:58 Используй QPixmap scaled(). и флаг Qt::KeepAspectRatio Больше никак? Мне это не нравиться т.к для этого нужно: 1) Или создать наследника QLabel и там перекрыть событие изменения размера. Это не хорошо, если объект QLabel рисуется в дизайнере и соответственно создаётся автоматически. Как подсунуть мой дочерний класс? 2) Или перекрыть событие изменения размера какого-то родителя QLabel и (на всякий случай) пересчитывать размер картинки. Это плохо т.к. везде где будет этот QLabel придётся писать эту логику. Название: Re: Масштабирование картинки на QLabel с сохранением отношения cx/cy Отправлено: sasha12345 от Август 17, 2012, 14:08 Ещё я думал про вариант пропорционального изменения не картинки на QLabel, а самого QLabel. Но мне так и не удалось с помощью разных лэйаутов и пружинок с одной стороны менять размер QLabel, а с другой стороны менять размер пропорционально.
Т.е., задача примерно следующая: Есть два виджета - один в другом. При изменении размера внешнего виджета, внутренний должен менять свой размер так, чтобы занимать максимум пространства внешнего, но сохраняя пропорции своих сторон. Так можно сделать? Название: Re: Масштабирование картинки на QLabel с сохранением отношения cx/cy Отправлено: Kurles от Август 17, 2012, 14:14 Используй QPixmap scaled(). и флаг Qt::KeepAspectRatio Больше никак? Мне это не нравиться т.к для этого нужно: 1) Или создать наследника QLabel и там перекрыть событие изменения размера. Это не хорошо, если объект QLabel рисуется в дизайнере и соответственно создаётся автоматически. Как подсунуть мой дочерний класс? Название: Re: Масштабирование картинки на QLabel с сохранением отношения cx/cy Отправлено: sasha12345 от Август 17, 2012, 14:35 Используй QPixmap scaled(). и флаг Qt::KeepAspectRatio Больше никак? Мне это не нравиться т.к для этого нужно: 1) Или создать наследника QLabel и там перекрыть событие изменения размера. Это не хорошо, если объект QLabel рисуется в дизайнере и соответственно создаётся автоматически. Как подсунуть мой дочерний класс? Я тут откопал ф-ю QSizePolicy::setHeightForWidth(). Но что-то не помогает. или это не то? Название: Re: Масштабирование картинки на QLabel с сохранением отношения cx/cy Отправлено: Kurles от Август 17, 2012, 15:14 Если ты будешь менять размер самого QLabel, размер Pixmap'а, размещенного на QLabel же не изменится. То есть тебе надо то всего ловить событие QEvent::Resize, и соответственно новым размерам QLabel'а изменять размер и картинки. Или я не понял твоего задания ))
Название: Re: Масштабирование картинки на QLabel с сохранением отношения cx/cy Отправлено: sasha12345 от Август 17, 2012, 15:28 Если ты будешь менять размер самого QLabel, размер Pixmap'а, размещенного на QLabel же не изменится. Я установлю scaledContents, т.е. Pixmap будет растянут на весь QLabel То есть тебе надо то всего ловить событие QEvent::Resize, и соответственно новым размерам QLabel'а изменять размер и картинки. Если по другому не получится, наверное придётся так и сделать.Или я не понял твоего задания )) Думаю понял правильно. Более точно задача в следующем:Нужно в определённом месте диалогового окна отобразить картинку. причём при изменении размеров диалогового окна её размеры тоже должны меняться, но с сохранение отношения сторон. Просто для отображения картинки был выбран QLabel и соответственно появились связанные с эти выбором проблеммы. Название: Re: Масштабирование картинки на QLabel с сохранением отношения cx/cy Отправлено: Silentium от Август 21, 2012, 10:39 А если просто создать потомка QWidget, как виджет и переопределить в ем метод PaintEvent и встваить потом этот виджет через дизайнер.
|