Russian Qt Forum

Qt => Общие вопросы => Тема начата: Eugene Efremov от Декабрь 15, 2008, 18:47



Название: вертикальный текст
Отправлено: Eugene Efremov от Декабрь 15, 2008, 18:47
Для сабжа мне, что-то, не приходит в голову ничего лучше, чем:
Код
C++ (Qt)
void MyWidget::drawTextV(QPainter *painter, const QPoint& p, const QString& str)
{
QFontMetrics fm(painter->font());
int x = fm.height();
int y = fm.width(str);
 
QPixmap pm(x, y);
pm.fill(QColor(0,0,0,0));
 
QPainter ppm(&pm);
ppm.initFrom(this);
ppm.rotate(90);
ppm.drawText(0,0,str);
ppm.end();
 
painter->drawPixmap(p, pm);
}
 
:(

Существует ли в природе менее черезж..ный способ?


Название: Re: вертикальный текст
Отправлено: Alex03 от Декабрь 16, 2008, 11:36
А чем просто painter->rotate() и painter->drawText() не устраивает?


Название: Re: вертикальный текст
Отправлено: Rcus от Декабрь 16, 2008, 12:09
Я не пробовал, но вроде в Qxt есть нужное:
http://doc.libqxt.org/latest/classQxtPushButton.html


Название: Re: вертикальный текст
Отправлено: Eugene Efremov от Декабрь 17, 2008, 13:58
Мда... Вот вариант чуть получше:
Код
C++ (Qt)
void MyWidget::drawTextV(QPainter *painter, const QPoint& p, const QString& str)
{
QTransform old = painter->transform();
painter->translate(p);
painter->rotate(90);
painter->drawText(0, 0, str);
painter->setTransform(old);
}
 

Все равно — криво это все. Хочется, чтоб было как-нибудь так:
Код
C++ (Qt)
painter->drawText(p, str, QTransform().rotate(90));
 
Да видно, это только мечты...  :-\


Название: Re: вертикальный текст
Отправлено: Detonator от Декабрь 17, 2008, 14:04
Ну сделай глобальную функцию обертку если во многих местах используется.