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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как определить высоту текста?  (Прочитано 5980 раз)
Dark
Гость
« : Апрель 18, 2012, 17:24 »

Вывожу текст через QPainter:
Код
C++ (Qt)
QPainter painter(this);
QString text = "someText";
painter.drawText(0, 20, text);
 
Как узнать высоту текста?

Записан
V1KT0P
Гость
« Ответ #1 : Апрель 18, 2012, 17:28 »

Вывожу текст через QPainter:
Код
C++ (Qt)
QPainter painter(this);
QString text = "someText";
painter.drawText(0, 20, text);
 
Как узнать высоту текста?


Вроде вот так:
Код
C++ (Qt)
QFontMetrics fm = painter.fontMetrics();
fm.height();
fm.width(text);
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Апрель 18, 2012, 17:30 »

Код
C++ (Qt)
painter.fontMetrics().boundingRect( text ).height();
Записан

Qt 5.11/4.8.7 (X11/Win)
Dark
Гость
« Ответ #3 : Апрель 18, 2012, 17:47 »

Как я понял функция
Код
C++ (Qt)
QFontMetrics fm = painter.fontMetrics();
fm.height();
 
и
Код
C++ (Qt)
painter.fontMetrics().boundingRect( text ).height();
 
возвращяют не высоту текста, а непосредственно высоту текущего шрифта.

Например когда я в переменную text записал низкие буквы:
Код
C++ (Qt)
text = "ooo";
 
обе функции показали высоту = 13,
но и когда я заменил их на более высокие буквы:
Код
C++ (Qt)
text = "TJgy1";
 
результат не изменился, обе фунцкии опять возвращяли 13.

Так что это мне не подходит.

« Последнее редактирование: Апрель 18, 2012, 18:06 от Dark » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Апрель 18, 2012, 18:07 »

Как я понял функция
Код
C++ (Qt)
QFontMetrics fm = painter.fontMetrics();
fm.height();
 
и
Код
C++ (Qt)
painter.fontMetrics().boundingRect( text ).height();
 
возвращяют не высоту текста, а непосредственно высоту текущего шрифта.
Понял неправильно.
Какой фонт используется и на какой системе?
Записан

Qt 5.11/4.8.7 (X11/Win)
Dark
Гость
« Ответ #5 : Апрель 18, 2012, 18:10 »

Система - Windows 7 x64 SP1
шрифт дефолтный, незнаю какой стоит по умолчанию
Записан
V1KT0P
Гость
« Ответ #6 : Апрель 18, 2012, 18:33 »

Как я понял функция
Код
C++ (Qt)
QFontMetrics fm = painter.fontMetrics();
fm.height();
 
и
Код
C++ (Qt)
painter.fontMetrics().boundingRect( text ).height();
 
возвращяют не высоту текста, а непосредственно высоту текущего шрифта.
Понял неправильно.
Какой фонт используется и на какой системе?
Реально максимальную высоту показывает, хотя если посимвольно проверять то показывает высоту символа(для текста и для отдельного символа используется разный способ получения размеров. Почему без понятия, я особо в исходниках не копался).
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Апрель 18, 2012, 18:54 »

Dark, извиняюсь, насчёт boundingRect() я погорячился, т.к. высота действительно берётся от высоты фонта.
Для точной высоты есть tightBoundingRect(), но как пишут тролли
Цитата: assistant
Warning: Calling this method is very slow on Windows.
Записан

Qt 5.11/4.8.7 (X11/Win)
Dark
Гость
« Ответ #8 : Апрель 18, 2012, 19:23 »

tightBoundingRect() работает как надо, спасибо, предупреждение о медленной работе учту.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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