Как нарисовать полупрозрачный прямоугольник в Qt?
Я пытаюсь нарисовать полупрозрачный прямоугольник поверх изображения в качестве подсветки. К сожалению, ничто из того, что я пытаюсь, не может выполнить эффект прозрачности, который я хочу. Вместо этого я просто получаю сплошные заполненные прямоугольники, без прозрачности.
вот что я сейчас делаю:
void PageView::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QImage img=...;
painter.drawImage(0, 0, img);
...
// draw a light blue, transparent rectangle to highlight
QRect rect=...;
painter.fillRect(rect, QColor(128, 128, 255, 128));
...
}
к сожалению, для меня это рисует твердый синий прямоугольник, а не полупрозрачный, который я ожидаю из-за предоставления QBrush
Альфа значение.
Я также пробовал рисовать до промежуточного QImage
или QPixMap
, играя с painter.setCompositionMode(...)
. Пока не повезло.
таким образом, мой вопрос: Как я могу убедить Qt нарисовать полупрозрачный прямоугольник для моего PageView
?
редактировать: если это актуально, я создаю это под Qt 4.8.1 на Windows.
1 ответов
код работает для меня с небольшой модификацией, поскольку он не компилируется так, как у вас:
painter.fillRect(rect, QBrush(QColor(128, 128, 255, 128)));
Примечание:
OP рисовал полупрозрачный прямоугольник в цикле, заставляя одну и ту же область окрашиваться несколько раз. Это приведет к аддитивному эффекту, который в конечном итоге заставит эту область выглядеть так же, как твердое заполнение.