Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: dr_Begemot от Июнь 18, 2009, 12:53



Название: Как нарисовать текст под углом
Отправлено: dr_Begemot от Июнь 18, 2009, 12:53
Нужно нарисовать текст под некоторым углом, при этом не поворачивая уже нарисованное. Рисую с помощью QPainter.


Название: Re: Как нарисовать текст под углом
Отправлено: Rcus от Июнь 18, 2009, 13:03
$QTDIR/examples/painting/transformations


Название: Re: Как нарисовать текст под углом
Отправлено: dr_Begemot от Июнь 18, 2009, 13:11
$QTDIR/examples/painting/transformations

Не могли бы вы пояснить, не очень понял из исходников как это сделать...
нужно просто чтобы текст в точке
painter->drawText(axisRect.right() + 10, y - 10, margin - 5, 20,Qt::AlignLeft, Qt::AlignVCenter,"abcd");
рисовался из этой же точки но располагался вертикально


Название: Re: Как нарисовать текст под углом
Отправлено: pastor от Июнь 18, 2009, 14:47
см.

Цитировать
void QPainter::rotate ( qreal angle )
void QPainter::setWorldMatrix ( const QMatrix & matrix, bool combine = false )


Название: Re: Как нарисовать текст под углом
Отправлено: dr_Begemot от Июнь 18, 2009, 16:35
см.

Цитировать
void QPainter::rotate ( qreal angle )
void QPainter::setWorldMatrix ( const QMatrix & matrix, bool combine = false )

Решил проблему проще...
Написал функцию которая выводит повернутый текст:
Код:
void drawRotateText(QPainter *painter, float degrees,
                             int x, int y, int w, int h, int flags, const QString &text, QRect *br=0){
painter->save();
painter->translate(x, y);
painter->rotate(degrees);
painter->drawText(0, 0, w, h, flags, text, br);
painter->restore();
}


Название: Re: Как нарисовать текст под углом
Отправлено: notnext от Июль 01, 2009, 12:14
Вот еще один способ кому будет интересно! ;)

 
Код
C++ (Qt)
 
       painter->save();
painter->setTransform(QTransform()
                .translate(r.width() / 2, r.height() / 2)
                .rotate(30, Qt::XAxis)
                .rotate(10, Qt::YAxis)
                .rotate(5, Qt::ZAxis)
                .scale(0.1 , 0.1)
                .translate(-r.width() / 2, -r.height() / 2));
painter->drawText(0, 0, w, h, flags, text, br);
painter->restore();