Russian Qt Forum

Qt => Общие вопросы => Тема начата: demaker от Июнь 17, 2022, 10:49



Название: Отрисовка текста в QGraphicsItem.
Отправлено: demaker от Июнь 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;
}
 
 
 


Название: Re: Отрисовка текста в QGraphicsItem.
Отправлено: tux от Июнь 17, 2022, 17:24
Можно решить задачу "в лоб" - создать картинку с нужным текстов (например в QImage), вырезать нужное оттуда и положить куда надо.
Или, наоборот - посчитать размер текста, с делать из этого размера прямоугольник и вставить куда надо.
Или текст динамически отмасштабиравать под нужный прямоугольник.


Название: Re: Отрисовка текста в QGraphicsItem.
Отправлено: ssoft от Июнь 20, 2022, 07:47
Используйте метод drawText с другими параметрами


Код
C++ (Qt)
void QPainter::drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)