Text unter Qt4 gedreht zeichnen

Alles rund um die Programmierung mit Qt
Antworten
pp_coder
Beiträge: 4
Registriert: 8. Mai 2008 22:06

Text unter Qt4 gedreht zeichnen

Beitrag 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?
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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...
Dateianhänge
qpush1.h
(1.91 KiB) 175-mal heruntergeladen
qpush1.cpp
(5.52 KiB) 185-mal heruntergeladen
.........................
speack português italiano deutsch english castellà qt
pp_coder
Beiträge: 4
Registriert: 8. Mai 2008 22:06

Beitrag von pp_coder »

genau so eine Lösung hab ich gesucht, danke :)
Antworten