Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Система рисования. Печать _ Непонятки с QPainter::viewport

Автор: Rocky 25.3.2009, 19:48

Всем привет!

Не могу разобраться с выводом на печать. Есть функция QPainter::viewport которая вроде как возвращает область печати.
Пишу такой код:

m_pPrinter = new QPrinter();
m_pPrinter->setPaperSize(QPrinter::A4);

Затем создаю QPainter на основе этого принтера. Но на разных машинах QPainter::viewport возвращает разные значения. В результате, на одной машине все выводится на печать нормально, на другой - обрезаются края.... Как сделать, чтобы размеры области вывода на печать были одинаковые? Ведь А4 он и в африке А4. Пробовал делть отступы нулевые (margins) - не помогает. Все равно данные обрезаются... Кто-нить знает, что вообще возвращает viewport? мм, см, пиксели? Почему так получается что на листе размером 297х210 мм на одной машине влезает все, а на другой происходит обрез? Как бороться?

Та же хрень касается и и генерации pdf. Вроде заявлено что один и тот же код одинаково все выводит. На одной и той же машине печатаю - ок, генерю pdf - половина данных где-то в ауте (((

Спасибо...

Автор: BRE 25.3.2009, 19:58

Цитата(Rocky @ 25.3.2009, 19:48) *
Кто-нить знает, что вообще возвращает viewport? мм, см, пиксели? Почему так получается что на листе размером 297х210 мм на одной машине влезает все, а на другой происходит обрез? Как бороться?

viewport возвращает размер в пикселях.
У разных принтеров, разное разрешение в точках (это параметр "Количество точек на дюйм" (DPI)).
Тебе нужно все маштабировать относительно этого dpi.
Посмотри на QPaintDevice, это базовый класс для QPrinter.
Он тебе сможет вернуть размеры в мм, ну и сами значения dpi.

Автор: Rocky 25.3.2009, 20:15

ага,....
А можно как-то "беболезненно" отмаштабировать всю страницу? В смысле чтобы все данные уместились на странице? или лучше играться dpi и подобрав нужный коэффициент, например, устанавливать соотвествующее dpi на всех машинах?

Автор: BRE 25.3.2009, 20:23

Цитата(Rocky @ 25.3.2009, 20:15) *
ага,....
А можно как-то "беболезненно" отмаштабировать всю страницу? В смысле чтобы все данные уместились на странице? или лучше играться dpi и подобрав нужный коэффициент, например, устанавливать соотвествующее dpi на всех машинах?

Есть размер страницы в точках, есть размер в мм. Делим первое на второе - получаем коэффициент (количество точек в одном мм).
При формировании отчета все размеры задавай в мм, а для пересчета в точки умножай на получившийся коэффициент.

Автор: Rocky 26.3.2009, 14:59

С этим вроде разобрался... Все решилось проще: вызовом QPrinter::setFullPage(true). Теперь хоть одинаковость появилась.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)