Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: navrocky от Май 22, 2012, 23:07



Название: [РЕШЕНО] Как залить прозрачным цветом область QPixmap?
Отправлено: navrocky от Май 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);
 

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

Есть ли какой-нибудь хак чтобы сделать сабж?


Название: Re: Как залить прозрачным цветом область QPixmap?
Отправлено: iroln от Май 22, 2012, 23:37
setMask - это не то?


Название: Re: [РЕШЕНО] Как залить прозрачным цветом область QPixmap?
Отправлено: navrocky от Май 22, 2012, 23:48
Не срабатывало по другим причинам. В реальном коде QPixmap порождался из QImage (ARGB32), который не содержал прозрачных пикселей, и, видимо, срабатывало "opaque detection" и QPixmap создавался без поддержки прозрачного. Соответственно дальнейшие попытки нарисовать в нём что-то прозрачное не проходили.


Название: Re: [РЕШЕНО] Как залить прозрачным цветом область QPixmap?
Отправлено: ctin от Май 23, 2012, 08:19
setBrush(QColor());
drawRect();


Название: Re: [РЕШЕНО] Как залить прозрачным цветом область QPixmap?
Отправлено: navrocky от Май 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);