0
我試圖用白色背景在QFrame上繪製兩個相同顏色和透明度的矩形。這些矩形應該重疊,並且它們的透明度不應改變(也在重疊區域中)。所以像這樣的:QPainter組合不如預期的那樣與背景一起工作
這裏是我的代碼至今:
class Canvas : public QFrame
{
public:
void paintEvent(QPaintEvent * event) override;
};
void Canvas::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setPen(QPen(Qt::NoPen));
painter.setBrush(QBrush(QColor(0,0,255,125)));
painter.drawRect(QRect(10,10,100,100));
painter.setCompositionMode(QPainter::CompositionMode_Source);
painter.setBrush(QBrush(QColor(0, 0, 255, 125)));
painter.drawRect(QRect(80, 80, 100, 100));
}
int main(int argc, char **argv)
{
QApplication a(argc, argv);
Canvas canvas;
canvas.setAutoFillBackground(true);
QPalette pal;
pal.setColor(QPalette::Window, QColor(Qt::red));
canvas.setBackgroundRole(QPalette::Window);
canvas.setPalette(pal);
canvas.show();
return a.exec();
}
然而,這將產生以下圖片:
我曾嘗試一切可能的對於畫家來說組合模式,但似乎沒有給我所需的效果。我猜CompositionMode_Source是正確的,因爲如果我使用下面的代碼:
QPixmap pixmap(200, 200);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setPen(QPen(Qt::NoPen));
painter.setBrush(QBrush(QColor(0, 0, 255, 125)));
painter.drawRect(QRect(10, 10, 100, 100));
painter.setCompositionMode(QPainter::CompositionMode_Source);
painter.setBrush(QBrush(QColor(0, 0, 255, 125)));
painter.drawRect(QRect(80, 80, 100, 100));
QLabel label;
label.setPixmap(pixmap);
label.show();
我得到預期的效果(但沒有紅色背景):
但是,如果我改變填寫的Qt ::紅,我再次得到:
缺少什麼我在這裏?我怎樣才能獲得我想要的效果?對此的實際應用是我想在QFrame派生類上繪製矩形,該派生類是在第三方庫中實現的,而在這個庫中,我受到了有限的控制。
您的第三條評論有效。不過,我需要繪製很多(細)矩形,在這種情況下painterpath方法非常慢。 QImage方法適用於大矩形,但如果尺寸較小(小於1像素),則無法使用。有關此用例的更多提示? – Frank
你是什麼意思?你不能只畫出同一幅圖像上的所有矩形(與目的地一樣大),然後將整個圖像畫出來? – peppe