Russian Qt Forum
Ноябрь 01, 2024, 12:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите вписать строку в прямоугольник  (Прочитано 5471 раз)
Caduceus
Гость
« : Декабрь 26, 2010, 23:25 »

Есть строка и есть железно заданный прямоуголник. Надо написать строку в прямоуголник с центрированием, чтоб вся строка туда убралась. Как это делают? Для каждого размера фонта смотрят списывается или нет, и есть нет, то уменьшают размер и все заново? Если делают всегда так, то вопрос:
 Как определить размеры, которые займет строка после отрисовки заданным фонтом?
Записан
alexman
Гость
« Ответ #1 : Декабрь 27, 2010, 00:07 »

QFontMetrics, QFontMetricsF
Записан
insamo
Гость
« Ответ #2 : Январь 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);
Записан
alex2013
Гость
« Ответ #3 : Август 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("Длинная предлинная строка ---- Длинная предлинная строка --- Длинная предлинная строка"));
}

Приведенный выше код, рисует на экране строчку. Но если ширина экрана небольшая, то эта строчка вся на экране не помещается и происходит ее обрезание. А как сделать так ,чтобы строчка при сжатии экрана уменьшалась автоматически по ширине при этом разбиваясь на несколько строк ? Ну а при расширении экрана строчка за ним автоматически вытягивалась.
Записан
dio
Гость
« Ответ #4 : Август 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("Длинная предлинная строка ---- Длинная предлинная строка --- Длинная предлинная строка"));
}
Записан
alex2013
Гость
« Ответ #5 : Август 07, 2013, 13:18 »

Спасибо, dio .Ваш пример помог.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.289 секунд. Запросов: 20.