2012-06-18 18 views
7

Sto provando a disegnare un rettangolo semitrasparente sopra un'immagine per fungere da evidenziazione. Sfortunatamente, niente di quello che provo sembra essere in grado di eseguire l'effetto di trasparenza che voglio. Invece ho solo rettangoli pieni, senza trasparenza.Come si disegna un rettangolo semitrasparente in Qt?

Ecco quello che sto facendo in questo momento:

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)); 
    ... 
} 

Purtroppo, per me, questo disegna un solida rettangolo blu, al posto di quella semi-trasparente Mi aspetto che a causa dando il QBrush un alfa valore.

Ho anche provato a disegnare su un intermedio QImage o QPixMap, giocando con painter.setCompositionMode(...). Nessuna fortuna finora.

Quindi la mia domanda: come posso convincere Qt a disegnare un rettangolo semitrasparente al mio PageView?

EDIT: Se è rilevante, sto costruendo questo sotto Qt 4.8.1 su Windows.

+0

Non esiste un costruttore 'QBrush (r, g, b, a)' nel [Qt docs] (http://doc-snapshot.qt-project.org/4.8/qbrush.html). Intendevi 'QColor'? –

+0

Sì, sì. Errore mio. – Managu

+0

Completo 'PageView :: paintEvent' su http://pastebin.com/Dj9dDd0c. Anche se non penso ci sia nulla di interessante in ciò che ho omesso. – Managu

risposta

13

Il codice funziona per me con una piccola modifica in quanto non compilare come lo avete:

painter.fillRect(rect, QBrush(QColor(128, 128, 255, 128))); 

NOTA:

L'OP dipingeva il rettangolo semi trasparente in un ciclo che causa la stessa area da pitturare più volte. Ciò si tradurrà in un effetto additivo che alla fine farà sì che quell'area assomigli a un riempimento solido.

+0

Rightio, digitare nella mia domanda di invio. Ma questo produce rettangoli solidi per me, non semi-trasparenti. – Managu

+0

Hai provato la chiamata 'fillRect()' come ho qui con un 'QBrush'? –

+0

Aggiunto full paste su http://pastebin.com/Dj9dDd0c – Managu

Problemi correlati