Настройка QPrinter:
По умолчанию объект QPrinter
инициализируется с разрешением экрана (обычно 96 DPI), если вы не укажете QPrinter::HighResolution
в конструкторе, который затемиспользуйте разрешение используемого принтера.
Если вы настраиваете объект QPrinter
, используя QPrintDialog
, тогда код должен выглядеть примерно так:
QPrinter printer(QPrinter::HighResolution);
QPrintDialog dialog(&printer, this);
dialog.exec();
std::cout << printer.resolution() << std::endl;
После этого программа должна вывести DPI DPIвыбранный принтер.В моем случае он печатает 600.
Если вы не используете QPrintDialog
, вы должны использовать конструктор QPrinter
, как показано выше, а затем вызвать setResolution(DPI)
с известным DPI вашего принтера.
Это должно привести к тому, что шрифты будут правильно отображаться.
Обновление:
Теперь, когда выходные уже здесь, у меня наконец-то появилось время, чтобы правильно рассмотретьэта проблема :) Хотя это технически правильно для настройки QPrinter, вышеупомянутое решение не практично для графических сцен, которые включают текст, указанный в размерах точек.Поскольку все графические элементы указаны в пиксельных координатах, имеет смысл указывать только размеры шрифта в пикселях, чтобы гарантировать, что шрифты выглядят точно так, как ожидается, при смешивании с другими графическими примитивами.
Нет необходимости беспокоитьсяо размере текста на разных мониторах, поскольку сами графические элементы не зависят от разрешения.Представление может указывать масштабные переводы для работы с мониторами с различным разрешением и разрешением.
При печати QPrinter по умолчанию масштабируется, чтобы подогнать всю сцену к странице.Это имеет смысл, поскольку квадрат 100 x 100 на принтере с разрешением 600 точек на дюйм будет иметь ширину 1/6 дюйма на бумаге:)