QPainter und drawText() Skallierungsproblem

Alles rund um die Programmierung mit Qt
Antworten
GrooveXT
Beiträge: 26
Registriert: 18. September 2008 17:10

QPainter und drawText() Skallierungsproblem

Beitrag 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
seneca
Beiträge: 23
Registriert: 6. Januar 2006 09:57

Beitrag von seneca »

wie wäre es mit sowas:

Code: Alles auswählen

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