Как нарисовать полупрозрачный прямоугольник в 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 рисовал полупрозрачный прямоугольник в цикле, заставляя одну и ту же область окрашиваться несколько раз. Это приведет к аддитивному эффекту, который в конечном итоге заставит эту область выглядеть так же, как твердое заполнение.