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