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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: (РЕШЕНО)Разные размеры шрифтов в Windows и Linux.  (Прочитано 3859 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Октябрь 28, 2015, 16:45 »

Осталась проблема, которую не знаю пока как решать, не принципиальная но противная потому что на виду. Мне нужно на QGraphicsScene подстраивать некоторые объекты под размеры текста в них, для чего выполняю:
Код:
    QFont f = QApplication::font();
    f.setPixelSize( 12 );
    QFontMetrics fm( f );
    textheight = fm.boundingRect( text ).height();
    textwidth = fm.boundingRect( text ).width();

И дальше использую textwidth и textheight для управления размерами объектов. Вписал задание размера шрифта в пикселах, поскольку посчитал, что тогда в Windows и Linux размеры текста будут визуально одинаковые. Нифига. Объекты, которые зависят от textwidth в обеих ОС имеют одинаковую ширну (можно линейкой померять), но сам текст - почему-то нет. Получается, что в Linux изображаемый текст не соответствует вычисляемым размерам - он заметно крупнее. То есть, в Linux текст вылазит куда не следует. И в Linux шрифт не только шире - он и выше. Ну ладно были бы разные системные установки шрифтов, но я ведь жестко вписал размер, чтобы от него не зависеть. Причем в пикселах, чтобы соблюсти пропорции с объектами, размеры которых тоже в пикселах вычисляются.

Кто с этим сталкивался? Как решали?
« Последнее редактирование: Октябрь 28, 2015, 19:21 от Гурман » Записан

2^7-1 == 127, задумайтесь...
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Октябрь 28, 2015, 16:59 »

Попробуй QFontMetrics::tightBoundingRect().
Записан

Qt 5.11/4.8.7 (X11/Win)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Октябрь 28, 2015, 17:12 »

Попробуй QFontMetrics::tightBoundingRect().

Эээ... я так понимаю, это несколько не то. Это очевидно подгонит объекты, и они станут разными в разных ОС. Для чего достаточно

Код:
    QFontMetrics fm( QApplication::font() );
    textheight = fm.boundingRect( text ).height();
    textwidth = fm.boundingRect( text ).width();

И всё, размеры объектов будут под текст, но мне не это нужно. Нужно, чтобы текст имел одинаковые размеры, соответственно, объекты в обеих ОС были одинаковыми.

ЗЫ: не, нифига... с tightBoundingRect() при задании размеров шрифта всё тоже самое, что и с boundingRect(), идентично
« Последнее редактирование: Октябрь 28, 2015, 17:16 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #3 : Октябрь 28, 2015, 19:21 »

Тфу... нашел у себя ошибку.
Записан

2^7-1 == 127, задумайтесь...
AlekseyK
Гость
« Ответ #4 : Октябрь 31, 2015, 05:07 »

Так в чём ошибка? Поделись окончательным вариантом, пожалуйста.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #5 : Октябрь 31, 2015, 20:50 »

Так в чём ошибка? Поделись окончательным вариантом, пожалуйста.

Ошибка была в другом месте - из-за очепятки в имени метода сигнал от invokeMethod() не приходил, и размеры объекта не пересчитывались по вычисленным размерам текста. А так всё в первом посте сделано правильно.
Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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