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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Как залить прозрачным цветом область QPixmap?  (Прочитано 6384 раз)
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« : Май 22, 2012, 23:07 »

Такой код заливает QPixmap прозрачным полностью:
Код
C++ (Qt)
QPixmap pm(100, 100);
pm.fill(Qt::transparent);
 

В доке не нашел метода залить регион.

Попробовал с помощью QPainter:
Код
C++ (Qt)
QPixmap pm(100, 100);
pm.fill(Qt::red);
QPainter p(&pm);
p.setCompositionMode(QPainter::CompositionMode_Source);
p.fillRect(0, 0, 50, 50, Qt::transparent);
 

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

Есть ли какой-нибудь хак чтобы сделать сабж?
« Последнее редактирование: Май 22, 2012, 23:45 от navrocky » Записан

Гугль в помощь
iroln
Гость
« Ответ #1 : Май 22, 2012, 23:37 »

setMask - это не то?
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #2 : Май 22, 2012, 23:48 »

Не срабатывало по другим причинам. В реальном коде QPixmap порождался из QImage (ARGB32), который не содержал прозрачных пикселей, и, видимо, срабатывало "opaque detection" и QPixmap создавался без поддержки прозрачного. Соответственно дальнейшие попытки нарисовать в нём что-то прозрачное не проходили.
Записан

Гугль в помощь
ctin
Гость
« Ответ #3 : Май 23, 2012, 08:19 »

setBrush(QColor());
drawRect();
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #4 : Май 25, 2012, 15:54 »

Цитировать
Код
C++ (Qt)
setBrush(QColor());
drawRect();

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

Тогда уж так:
Код
C++ (Qt)
QPainter p(&pixmap);
p.setCompositionMode(QPainter::CompositionMode_Source);
p.fillRect(rect, Qt::transparent);
Записан

Гугль в помощь
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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