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

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

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

Сообщений: 960


Просмотр профиля
« : Июнь 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
Крякер
****
Offline Offline

Сообщений: 399



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

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

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

Сообщений: 574


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

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


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


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