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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsTextItem: обрезка букв курсивного текста  (Прочитано 4334 раз)
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« : Февраль 21, 2014, 08:17 »

Пусть необходимо вывести курсивный текст, простейший пример - http://pastebin.com/gfL0X1rZ
Что получается: http://i60.fastpic.ru/big/2014/0221/24/a54a07b24df6c8ecf68b71720eb64b24.png

Какие вижу решения:
1. Думаю лучшим решением будет разрешить тексту вылезать за границы элемента QGraphicsTextItem - можно ли ?
2. Можно для курсива увеличить левый отступ, но setDocumentMargin меняет все отступы вокруг и т.к. текст нужно точно позиционировать - придется много переписать (
3. Поставить пробел перед и после текста - плохой вариант
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Февраль 21, 2014, 10:19 »

Может проблема в фонте?
Если нет, то всё решится перегрузкой
Код
C++ (Qt)
QRectF QGraphicsTextItem::boundingRect () const [virtual]
и увеличением границ.
Записан

Qt 5.11/4.8.7 (X11/Win)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #2 : Февраль 21, 2014, 10:37 »

На 4.8.5 под win7 все ок.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #3 : Февраль 21, 2014, 12:15 »

Может проблема в фонте?
Если нет, то всё решится перегрузкой
Код
C++ (Qt)
QRectF QGraphicsTextItem::boundingRect () const [virtual]
и увеличением границ.

Какая проблема в шрифте? Почти все шрифты так себя ведут.

Перегрузка boundingRect помогла, спасибо !

Да, это было на версии 5.2.0
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #4 : Февраль 26, 2014, 10:07 »

Точнее перегрузка boundingRect не помогла, например hover события продолжали приходить для "бывшей" области (чтото еще сломалось)
Решил через установку стилей: (0x0414 =  "Д")
 
Код
C++ (Qt)
void adjustMargin(QGraphicsTextItem* ti)
{
   QTextDocument* d = ti->document();
   if (ti->font().italic())
   {      
       QFontMetricsF fm(ti->font());
       qreal lb = abs(fm.leftBearing(0x0414));
       QString s = QString("p { margin: 0 0 0 %1; }").arg(lb);
       d->setDefaultStyleSheet(s);
   }
   else
       d->setDefaultStyleSheet("p { margin: 0 0 0 0; }");
   ti->setDocument(d);
   ti->setHtml(QString("<html><head/><body><p>%1</p></body></html>").arg(ti->toPlainText()));
}
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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