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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отрисовка текста в QGraphicsItem.  (Прочитано 2536 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Июнь 17, 2022, 10:49 »

Всем доброго времени суток.

У меня вопрос по отрисовки текста внутри ячейки.
Рисуем прямоугольник и внутри его вертикально хотим написать текст)))

Текст и прямоугольник отрисовываются замечательно,
но длина текста выходит за геометрические размеры прямоугольника, то текст всеравно отрисовывается.
Ниже приведен код.

Это нрмально? Если да, то как сделать так чтобы, если та часть текста, которая выходит за геометрические
параметры boundingRect() не отрисовывалась?

Спасибо!

Код
C++ (Qt)
void Primitive::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
   Q_UNUSED(option)
   Q_UNUSED(widget)
 
   QPen pen;
   pen.setColor(color_text);
   painter->setPen(pen);
   painter->drawRect(rectf);
   painter->fillRect(rectf.x() + 1, rectf.y() + 1, rectf.width() - 1, rectf.height() - 1, color_background);
 
  painter->rotate(90);
 
  QFont font;
  font.setPixelSize(20);
  painter->setFont(font);
  painter->drawText(0, 0, QString("cell %1").arg(number, 0, 10));
}
 
QPainterPath Primitivel::shape() const
{
   QPainterPath painterpath;
   painterpath.addRect(rectf);
   return painterpath;
}
 
QRectF Primitive::boundingRect() const
{
   return rectf;
}
 
 
 
« Последнее редактирование: Июнь 17, 2022, 10:59 от demaker » Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #1 : Июнь 17, 2022, 17:24 »

Можно решить задачу "в лоб" - создать картинку с нужным текстов (например в QImage), вырезать нужное оттуда и положить куда надо.
Или, наоборот - посчитать размер текста, с делать из этого размера прямоугольник и вставить куда надо.
Или текст динамически отмасштабиравать под нужный прямоугольник.
Записан

ssoft
Программист
*****
Offline Offline

Сообщений: 583


Просмотр профиля
« Ответ #2 : Июнь 20, 2022, 07:47 »

Используйте метод drawText с другими параметрами


Код
C++ (Qt)
void QPainter::drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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