Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Гурман от Октябрь 28, 2015, 16:45



Название: (РЕШЕНО)Разные размеры шрифтов в Windows и Linux.
Отправлено: Гурман от Октябрь 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 шрифт не только шире - он и выше. Ну ладно были бы разные системные установки шрифтов, но я ведь жестко вписал размер, чтобы от него не зависеть. Причем в пикселах, чтобы соблюсти пропорции с объектами, размеры которых тоже в пикселах вычисляются.

Кто с этим сталкивался? Как решали?


Название: Re: Разные размеры шрифтов в Windows и Linux.
Отправлено: GreatSnake от Октябрь 28, 2015, 16:59
Попробуй QFontMetrics::tightBoundingRect().


Название: Re: Разные размеры шрифтов в Windows и Linux.
Отправлено: Гурман от Октябрь 28, 2015, 17:12
Попробуй QFontMetrics::tightBoundingRect().

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

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

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

ЗЫ: не, нифига... с tightBoundingRect() при задании размеров шрифта всё тоже самое, что и с boundingRect(), идентично


Название: Re: Разные размеры шрифтов в Windows и Linux.
Отправлено: Гурман от Октябрь 28, 2015, 19:21
Тфу... нашел у себя ошибку.


Название: Re: (РЕШЕНО)Разные размеры шрифтов в Windows и Linux.
Отправлено: AlekseyK от Октябрь 31, 2015, 05:07
Так в чём ошибка? Поделись окончательным вариантом, пожалуйста.


Название: Re: (РЕШЕНО)Разные размеры шрифтов в Windows и Linux.
Отправлено: Гурман от Октябрь 31, 2015, 20:50
Так в чём ошибка? Поделись окончательным вариантом, пожалуйста.

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