Russian Qt Forum

Qt => Общие вопросы => Тема начата: npopok от Июнь 15, 2007, 10:18



Название: QFont
Отправлено: npopok от Июнь 15, 2007, 10:18
Мне нужно в зависимости от размера рисуемой области автоматически подбирать максимальный размер шрифта.Соответственно,чтобы весь текст помещался в этой области.
Как мне это лучше сделать?


Название: QFont
Отправлено: SABROG от Июнь 15, 2007, 10:39
Это ты как в excelе сделать хочешь, чем больше буков в тексте, тем меньше шрифт в ячейке ?


Название: QFont
Отправлено: BaltikS от Июнь 15, 2007, 10:48
QFontMetrics туда смотри


Название: QFont
Отправлено: SABROG от Июнь 15, 2007, 11:00
Цитата: "BaltikS"
QFontMetrics туда смотри


Я например не нашел там ни одного метода для "подгона" размера шрифта под определенную рамку. Зато узнать размер рамки по размеру шрифта - пожалста. Как выход из положения - перебор всех размеров шрифта пока boundingRect не станет равным твоим размерам.


Название: QFont
Отправлено: J. Bond от Июнь 15, 2007, 11:05
А QFontInfo::pixelseize или pointsize?
делим высоту прямоугольника на размер точки, получаем размер шрифта


Название: QFont
Отправлено: SABROG от Июнь 15, 2007, 11:16
Цитата: "J. Bond"
А QFontInfo::pixelseize или pointsize?
делим высоту прямоугольника на размер точки, получаем размер шрифта


Тут высотой не обойдешься, текст произвольной длинны, также как и ширина виджета. Шрифт должен уменьшаться в зависимости от длинны текста.


Название: QFont
Отправлено: J. Bond от Июнь 15, 2007, 11:26
Длина текста=размер шрифта * размер точки * количество букв ? :)


Название: QFont
Отправлено: SABROG от Июнь 15, 2007, 11:33
Цитата: "J. Bond"
Длина текста=размер шрифта * размер точки * количество букв ? :)


Цитировать

А QFontInfo::pixelseize или pointsize?
делим высоту прямоугольника на размер точки, получаем размер шрифта


Размер шрифта - это итоговый результат, а в твоей формуле он используется чтобы вычеслить длинну строки. Размер шрифта - это твое неизвестное. У тебя уравнение с двумя неизвестными.


Название: QFont
Отправлено: J. Bond от Июнь 15, 2007, 11:35
Цитата: "SABROG"
Цитата: "J. Bond"
Длина текста=размер шрифта * размер точки * количество букв ? :)


Цитировать

А QFontInfo::pixelseize или pointsize?
делим высоту прямоугольника на размер точки, получаем размер шрифта


Размер шрифта - это итоговый результат, а в твоей формуле он используется чтобы вычеслить длинну строки. Размер шрифта - это твое неизвестное. У тебя уравнение с двумя неизвестными.


Т.к. нужно чтобы текст умешался в требуемой области, то длина текста = длине области.


Название: QFont
Отправлено: npopok от Июнь 15, 2007, 11:40
Я с начала находил необходимый размер квадрата для строки с заданным фоном с помощью QFontMetrics, а потом увеличивал фон и вновь повторял процедуру.  Но как-то это криво...

Мне нужно шрифт подобрать, а не длину текста найти)


Название: QFont
Отправлено: J. Bond от Июнь 15, 2007, 11:49
Цитата: "npopok"
Я с начала находил необходимый размер квадрата для строки с заданным фоном с помощью QFontMetrics, а потом увеличивал фон и вновь повторял процедуру.  Но как-то это криво...

Мне нужно шрифт подобрать, а не длину текста найти)


Блин ну не можем из уравнения найти? :)

РАЗМЕР ШРИФТА=(ДЛИНА ОБЛАСТИ ДЛЯ РИСОВАНИЯ)/(РАЗМЕР ТОЧКИ * КОЛИЧЕСТВО БУКВ)


Название: QFont
Отправлено: npopok от Июнь 15, 2007, 11:58
А размер точки не подскажешь?
Как ты учитываешь параметры  "левое пространство буквы","правое пространство буквы"и тп?Подскажи


Название: QFont
Отправлено: J. Bond от Июнь 15, 2007, 12:32
Сейчас откопал в FontMetrics хорошую функцию


qreal QFontMetricsF::averageCharWidth () const
Returns the average width of glyphs in the font.

Т.о. вместо размера точки можно использовать среднюю длину символа