Seite 1 von 1
Text unter Qt4 gedreht zeichnen
Verfasst: 23. Mai 2008 12:12
von pp_coder
Hallo,
ich habe Probleme unter Qt4 Text um eine bestimmte Gradzahl beim Zeichnen zu drehen.
Zum Zeichnen des Textes nutze ich QPainter::drawText().
Hab die Doku bereits durchforstet, aber ich finde nur die Funktion QPainter::rotate(), die mir aber nicht wirklich weiterhilft, da sie das gesamte Koordinatensystem im Ursprung dreht, und ich dann vor dem Problem stehe, die Positionskoordinaten zurückrechnen zu müssen.
Übersehe ich eine andere Möglichkeit, hat jemand eine Idee?
Verfasst: 23. Mai 2008 13:04
von patrik08
mache doch vector text!
beim resize event muss man dann auf nichts achten...
Code: Alles auswählen
void QPush1::paintText()
{
QPainter *pg = new QPainter(this);
pg->setRenderHint(QPainter::Antialiasing);
const int borderI = 18;
QPointF baseline(2,55 * 0.98); /* font size */
/* font size */
/* button text */
QPainterPath textPath;
QPainterPath textPath2;
textPath.addText(baseline,fontText,textBut); //// fontText is any font() //// textBut text one line
/* fix view from text */
const QRectF reo = textPath.boundingRect();
TXTrect = reo;
const QRectF paintArea( 0 , 0 , reo.width() + (borderI * 2), reo.height() + (borderI * 2) );
//////QPixmap imgtext(reo.size().toSize());
////////QPainter *p = new QPainter(&imgtext);
//////////p->setRenderHint(QPainter::Antialiasing);
pg->setWindow ( 0 , 0 , reo.width() + (borderI * 2), reo.height() + (borderI * 2) );
QRectF imagepos( borderI , borderI , reo.width() , reo.height() );
QPointF textline(borderI / 2 ,reo.height() + borderI );
textPath2.addText(textline,fontText,textBut);
if (pushed || focus || ActiveButton ) {
pg->setPen(QPen(Qt::red,1, Qt::SolidLine, Qt::RoundCap,Qt::RoundJoin));
pg->setBrush(Qt::gray);
pg->drawRect(paintArea);
pg->setBrush(colActiveText);
pg->drawPath(textPath2);
} else {
pg->setPen(QPen(Qt::lightGray,2, Qt::SolidLine, Qt::RoundCap,Qt::RoundJoin));
pg->setBrush(Qt::white);
pg->drawRect(paintArea);
pg->setBrush(colText);
pg->drawPath(textPath2);
}
pg->end();
QMatrix matrix;
matrix.scale(paintArea.width() / width(),paintArea.height() / height());
emit CurrentMatrix(matrix,paintArea);
}
dann must du nur noch die QMatrix aendern ... vieleicht auch qrect
In der anlage is alles drinnen ... macht einfach ein Vector Button...
Verfasst: 23. Mai 2008 14:29
von pp_coder
genau so eine Lösung hab ich gesucht, danke
