Различные фактические размеры шрифта с одинаковым размером шрифта в Qt 5

Я использую QGraphicsScene для рисования некоторых вещей. Посмотрите на спинбокс в представлении.

Спинбокс на экране

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

Когда я экспортирую свою сцену в SVG с QSvgGenerator, я ставлю разрешение, например, 150. В рисовании я все рассчитываю с заданным dpi и устанавливаю размеры шрифтов с setPointSize(), поэтому текст должен быть такого же масштаба, как на экране.

Но то, что я вижу, это:

Спинбокс в SVG

И везде, где я рисую текст в SVG, неважно, QPainter::drawText() или QTextDocument::drawContents(), шрифты с одинаковым размером пункта на самом деле немного больше, чем на экране.

Я не могу понять, что не так. Любые идеи?

P.S. Немного другие размеры спинбоксов - это масштабирование в просмотрщике PDF. Посмотрите на пропорции текста 1. Шрифт в SVG крупнее примерно на 4 pt.


person Igor Mironchik    schedule 31.12.2019    source источник
comment
Конечно, я могу обойти проблему, уменьшив размер шрифта примерно на 4 pt при рендеринге в SVG, но, на мой взгляд, это не очень хорошая идея.   -  person Igor Mironchik    schedule 31.12.2019
comment
SVG не зависит от разрешения. Мне непонятно, почему вы пытаетесь изменить DPI и пересчитать все размеры. Объясните пожалуйста?   -  person Paul LeBeau    schedule 01.01.2020
comment
Кто тебе это сказал?   -  person Igor Mironchik    schedule 01.01.2020
comment
разрешение : int Это свойство содержит разрешение сгенерированного вывода. Разрешение указывается в точках на дюйм и используется для расчета физического размера рисунка SVG. Это свойство было введено в Qt 4.5.   -  person Igor Mironchik    schedule 01.01.2020


Ответы (1)


В SVG все ок. Все размеры правильные. Проблема заключается в рисовании на экране, потому что QPainter использует меньший DPI, чем физический DPI экрана при рисовании текста с установленным размером точек. Я предполагаю, что QPainter где-то использует жестко запрограммированный DPI.

person Igor Mironchik    schedule 01.01.2020