Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Dark от Апрель 18, 2012, 17:24



Название: Как определить высоту текста?
Отправлено: Dark от Апрель 18, 2012, 17:24
Вывожу текст через QPainter:
Код
C++ (Qt)
QPainter painter(this);
QString text = "someText";
painter.drawText(0, 20, text);
 
Как узнать высоту текста?



Название: Re: Как определить высоту текста?
Отправлено: V1KT0P от Апрель 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);


Название: Re: Как определить высоту текста?
Отправлено: GreatSnake от Апрель 18, 2012, 17:30
Код
C++ (Qt)
painter.fontMetrics().boundingRect( text ).height();


Название: Re: Как определить высоту текста?
Отправлено: Dark от Апрель 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.

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



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


Название: Re: Как определить высоту текста?
Отправлено: Dark от Апрель 18, 2012, 18:10
Система - Windows 7 x64 SP1
шрифт дефолтный, незнаю какой стоит по умолчанию


Название: Re: Как определить высоту текста?
Отправлено: V1KT0P от Апрель 18, 2012, 18:33
Как я понял функция
Код
C++ (Qt)
QFontMetrics fm = painter.fontMetrics();
fm.height();
 
и
Код
C++ (Qt)
painter.fontMetrics().boundingRect( text ).height();
 
возвращяют не высоту текста, а непосредственно высоту текущего шрифта.
Понял неправильно.
Какой фонт используется и на какой системе?
Реально максимальную высоту показывает, хотя если посимвольно проверять то показывает высоту символа(для текста и для отдельного символа используется разный способ получения размеров. Почему без понятия, я особо в исходниках не копался).


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


Название: Re: Как определить высоту текста?
Отправлено: Dark от Апрель 18, 2012, 19:23
tightBoundingRect() работает как надо, спасибо, предупреждение о медленной работе учту.