Seite 1 von 1

Text transparent auf ein Widget zeichnen.

Verfasst: 28. August 2007 20:22
von Nash
Ich möchte gerne transparenten Text(also einfachen text ohne hintergrund) in mein Widget zeichnen.
Nun ist es aber so das ich mein Widget zum rendern für eine Grafik engine benutze, über das fertig gerenderte Bild möchte ich einfach einen Text zeichnen.

Geht sowas?

das steht bei mir im paint event drinn

Code: Alles auswählen

QPainter painter(this);
	 painter.setBrush(Qt::NoBrush);
	//painter.fillRect(QRect(0, 0, 300,100), Qt::transparent);
	 painter.fillRect(rect(), Qt::transparent);

     

	  QString text = tr("Use mouse wheel to zoom. "
                      "Press and hold left mouse button to scroll.");
    QFontMetrics metrics = painter.fontMetrics();
   
	int textWidth = metrics.width(text);

   
    painter.setPen(Qt::white);
    painter.drawText((width() - textWidth) / 2,
                     metrics.leading() + metrics.ascent(), text);

um kein flickern zu verhinden setze ich im cotr follgende Attribute:

Code: Alles auswählen

// direkt auf den Bildschirm zeichnen
setAttribute(Qt::WA_PaintOnScreen,true);
		
	// wir löschen das Fenster selbst
	setAttribute(Qt::WA_NoSystemBackground);


momentan ist mein Ganzes Widget schwarz und der Text steht da.
Also nicht ganz so wie ich es möchte...weiß jemand rat?

Verfasst: 3. September 2007 10:31
von Nash
hat niemand eine Idee?

Verfasst: 3. September 2007 15:09
von CaptnChaos
so wie ich das verstehe zeichnest du erst dein bild auf das widget und dann nochmal den text auf das bild auf dem widget?
warum zeichnest du nicht direkt den text auf das bild und dann das bild auf das widget?

und sonst lass das mit dem fillRect und transparent mal weg.

wenn das auch nicht hilft, zeichne deinen text erst auf ein transparentes pixmap (falls es nicht durch Qt::transparent durchsichtig wird, kopiere einfach den teil deinses gerenderten bildes, der von dem text überschattet wird in die pixmap) und dann auf dein widget.

ps: wenns dann nicht funktioniert, bitte screenshot von allen versuchen.