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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QPainter сохранение пропорций фигуры при ресайзе  (Прочитано 3485 раз)
folax
Гость
« : Март 06, 2015, 12:18 »

Добрый день. Подскажите пожалуйста, как правильно сохранять пропорции фигуры при рисовании через QPainter. Фигура при ресайзе должна сохранять свои пропорции.
Пример:
 


Код:

Код:
    QPainter painter(this);
    QBrush brush(Qt::gray, Qt::SolidPattern);

    QRect screen(0, 0, width(), height());
    painter.drawRect(screen);
    painter.fillRect(screen, brush);

    QBrush blockBrush(Qt::blue, Qt::SolidPattern);

    QRect block(0, 0, screen.width() / 2 , screen.height() / 2);
    painter.drawRect(block);
    painter.fillRect(block, blockBrush);
« Последнее редактирование: Март 06, 2015, 14:10 от folax » Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #1 : Март 06, 2015, 12:47 »

Код:
	float ratio  = 1;

QPainter painter(this);
QBrush brush(Qt::gray, Qt::SolidPattern);

QRect screen(0, 0, width(), height());
painter.drawRect(screen);
painter.fillRect(screen, brush);

QBrush blockBrush(Qt::blue, Qt::SolidPattern);

int newWidth = screen.width() / 2;
int newHeight = screen.height() / 2;

if ((int)(newWidth * ratio) < newHeight) {
newHeight = newWidth * ratio;
}
if ((int)(newHeight / ratio) < newWidth) {
newWidth = newHeight / ratio;
}

QRect block(0, 0, newWidth , newHeight);
painter.drawRect(block);
painter.fillRect(block, blockBrush);
Записан
Hrundel
Гость
« Ответ #2 : Март 06, 2015, 12:48 »

Не знаю конечно, какие есть нативные функции, но с элементарной математикой надо дружить и писать такую фигню самостоятельно.

фактор = ширину / высоту

После изменения размера

ширина = высота * фактор
Записан
folax
Гость
« Ответ #3 : Март 06, 2015, 12:57 »

Спасибо большое за ответы, нужно Шлее в раздел про рисование этот фактор добавить. Закрывайте тему.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Март 06, 2015, 13:14 »

Спасибо большое за ответы, нужно Шлее в раздел про рисование этот фактор добавить. Закрывайте тему.

Вы создали, вам ее и закрывать Веселый
Подредактируйте первое сообщение, добавив в название темы в начало [РЕШЕНО]
« Последнее редактирование: Март 06, 2015, 13:30 от gil9red » Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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