Seite 1 von 1

QPainter und drawText() Skallierungsproblem

Verfasst: 29. Januar 2009 15:48
von GrooveXT
Hallo,
ich programmiere gerade meine eigene Diagramm Abbildungsklasse für Qt. Nun habe ich das Diagramm erstellt und lasse es über einen QPainter ausgeben. Über QPainter.translate und QPainter.scale verschiebe und skalieren ich das Diagramm. Nun habe ich aber das Problem, wenn ich recht kleine Wertebreiche habe (so zwischen 0.001 und 0.002) erhalte ich natürlich enorm große Skallierungsfaktoren (so um die 2000). Das Diagramm ansich wird einwandfrei dargestellt, allerdings ist die Schriftgöße unendlich groß.

Meine Frage ist nun wie kann ich den Text vom skalieren ausnehmen, eine feste Größe einstellen oder zumindest wieder einzeln herunter skalieren?

Das ist mein Paintevent

Code: Alles auswählen

void QTDiagramPlotter::paintEvent(QPaintEvent *e)
{
	QPainter painter(this);
	painter.setRenderHint(QPainter::Antialiasing, true);
	drawFrame(&painter);
	if(m_dataObject->isReadyToDraw())
	{		
		drawOverlay(&painter);
		painter.translate(m_poo);
		painter.scale(m_xScale,-m_yScale);
		drawAxis(&painter);
		drawDataRows(&painter);	
		if(m_dataObject->getShowDataPoints())
			drawDataPoints(&painter);
	}
}
und das hier meine Textausgabe

Code: Alles auswählen

void QTDiagramPlotter::drawAxis(QPainter *painter)
{
	//Koordinatensystem
	painter->setRenderHint(QPainter::Antialiasing, false);
	painter->drawLines(m_dataObject->getCoordinateSystem()->getCoordinateSystem());

	//Pfeile
	//painter->drawLines(m_dataObject->getCoordinateSystem()->getArrows());
	

	//***Achseinteilung
	//Beschriftung
	if(true)
	{
		painter->scale(1.0,-1.0);
			
		for (int i=0; i<m_dataObject->getCoordinateSystem()->getTickCaptionPoints().size();i++)
		{
			painter->drawText(m_dataObject->getCoordinateSystem()->getTickCaptionPoints()[i],m_dataObject->getCoordinateSystem()->getTickCaption()[i]);
		}
	
		painter->scale(1.0,-1.0);
	}
}
Habe schon probiert die Font Größe wie folgt zu setzen:

Code: Alles auswählen

QFont tmpFont;
tmpFont = painter->font();
tmpFont.setPointSizeF(10/m_yScale);
painter->setFont(tmpFont);

Aber auch das hat Nichts geändert.

Habe auch schon das Forum durchsucht, aber nichts gefunden, was irgendwie zu meinem Problem passt.

Bin für jede Hilfe dankbar.

Gruß
Groove

Verfasst: 30. Januar 2009 00:16
von seneca
wie wäre es mit sowas:

Code: Alles auswählen

painter->save();
painter->setWorldTransform(...);
for (.....) {
    painter->drawText(...);
}
painter->restore();