Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Непонятки с QPainter::viewport
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Система рисования. Печать
Rocky
Всем привет!

Не могу разобраться с выводом на печать. Есть функция QPainter::viewport которая вроде как возвращает область печати.
Пишу такой код:
m_pPrinter = new QPrinter();
m_pPrinter->setPaperSize(QPrinter::A4);

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

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

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

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

Есть размер страницы в точках, есть размер в мм. Делим первое на второе - получаем коэффициент (количество точек в одном мм).
При формировании отчета все размеры задавай в мм, а для пересчета в точки умножай на получившийся коэффициент.
Rocky
С этим вроде разобрался... Все решилось проще: вызовом QPrinter::setFullPage(true). Теперь хоть одинаковость появилась.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.