How to rotate text for drawText?

16,660

Solution 1

Insert painter->rotate(45); before painter->drawText(75, 100 + i * 800/9 - 6, 40, 40, 1, str); and painter->rotate(-45); after (to restore the rotation angle of the coordinate system):

painter->rotate(45);
painter->drawText(75, 100 + i * 800/9 - 6, 40, 40, 1, str);
painter->rotate(-45);

Depending on if you mean 45 degrees clockwise or anti-clockwise you may need to negate the rotation angles.

After you rotate the coordinate system, everything you paint will be painted rotated until you restore the painter. A convenient way of saving and restoring the state of the painter is using QPainter::save() and QPainter::restore().

Solution 2

painter->save(); // saves current painter state
// painter->rotate(45); clockwise rotation 
// painter->rotate(-45); counter clockwise rotation
painter->restore(); // restores painter state

Solution 3

In order to rotate your text (and any other drawable object) drawn by painter just call

painter->rotate(yourAngle);

before

painter->drawText();

If you wish to return to previous state call rotate again.

painter->rotate(-yourAngle);
Share:
16,660
jdl
Author by

jdl

Updated on June 13, 2022

Comments

  • jdl
    jdl almost 2 years

    I would like to rotate the text 45 degrees?

    QFont font;
    font.setPixelSize(12);
    
    //grid
    for(int i = 0; i < 10; i++){
        painter->drawLine(100, 100 + i * 800/9, 900, 100 + i * 800/9);
        str = QString::number((double)9 - i, 'd', 1);
        painter->setFont(font);
        painter->drawText(75, 100 + i * 800/9 - 6, 40, 40, 1, str);
    }
    
  • Frank Osterfeld
    Frank Osterfeld almost 11 years
    Either the rotate(-45) or the save/restore can be omitted
  • Admin
    Admin over 5 years
    But QPainter.rotate() - rotate coordinate system. So x and y coord in drawText now is incorrect