Text transparent auf ein Widget zeichnen.

Alles rund um die Programmierung mit Qt
Antworten
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Text transparent auf ein Widget zeichnen.

Beitrag 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?
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag von Nash »

hat niemand eine Idee?
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag 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.
Antworten