Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Caduceus от Декабрь 26, 2010, 23:25



Название: Помогите вписать строку в прямоугольник
Отправлено: Caduceus от Декабрь 26, 2010, 23:25
Есть строка и есть железно заданный прямоуголник. Надо написать строку в прямоуголник с центрированием, чтоб вся строка туда убралась. Как это делают? Для каждого размера фонта смотрят списывается или нет, и есть нет, то уменьшают размер и все заново? Если делают всегда так, то вопрос:
 Как определить размеры, которые займет строка после отрисовки заданным фонтом?


Название: Re: Помогите вписать строку в прямоугольник
Отправлено: alexman от Декабрь 27, 2010, 00:07
QFontMetrics, QFontMetricsF


Название: Re: Помогите вписать строку в прямоугольник
Отправлено: insamo от Январь 10, 2011, 15:25
painter->setFont(QFont("Times", 12, QFont::Bold));
painter->setPen(Qt::white);
painter->setBrush(QBrush(Qt::white));
painter->drawText(boundingRect(),Qt::AlignCenter,textCaption);


Название: Re: Помогите вписать строку в прямоугольник
Отправлено: alex2013 от Август 07, 2013, 12:05
Не хотелось бы создавать новую тему, так как у меня такой же вопрос "Помогите вписать строку в прямоугольник".

Код:
void Page::paintEvent(QPaintEvent * /* event */)
{
QPainter painter(this);

painter.setFont(QFont("Times", 12, QFont::Bold));
painter.setPen(Qt::blue);

QRect rect(0, 0, width()/2, 20);

painter.drawText(rect, Qt::AlignLeft, tr("Длинная предлинная строка ---- Длинная предлинная строка --- Длинная предлинная строка"));
}

Приведенный выше код, рисует на экране строчку. Но если ширина экрана небольшая, то эта строчка вся на экране не помещается и происходит ее обрезание. А как сделать так ,чтобы строчка при сжатии экрана уменьшалась автоматически по ширине при этом разбиваясь на несколько строк ? Ну а при расширении экрана строчка за ним автоматически вытягивалась.


Название: Re: Помогите вписать строку в прямоугольник
Отправлено: dio от Август 07, 2013, 12:16
Вот так:

Код:
void Page::paintEvent(QPaintEvent * /* event */)
{
QPainter painter(this);

painter.setFont(QFont("Times", 12, QFont::Bold));
painter.setPen(Qt::blue);

QRect rect(0, 0, width()/2, 20);

painter.drawText(rect, Qt::AlignLeft | Qt::TextWordWrap, tr("Длинная предлинная строка ---- Длинная предлинная строка --- Длинная предлинная строка"));
}


Название: Re: Помогите вписать строку в прямоугольник
Отправлено: alex2013 от Август 07, 2013, 13:18
Спасибо, dio .Ваш пример помог.