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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отрисовка текста в QGraphicsItem.  (Прочитано 2845 раз)
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

Сообщений: 405



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

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

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

Сообщений: 584


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

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


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


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