crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Тема закрытаНачать новую тему
> Непонятки с QPainter::viewport
Rocky
  опции профиля:
сообщение 25.3.2009, 19:48
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Всем привет!

Не могу разобраться с выводом на печать. Есть функция 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
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


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

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


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


ага,....
А можно как-то "беболезненно" отмаштабировать всю страницу? В смысле чтобы все данные уместились на странице? или лучше играться dpi и подобрав нужный коэффициент, например, устанавливать соотвествующее dpi на всех машинах?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 25.3.2009, 20:23
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


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

Есть размер страницы в точках, есть размер в мм. Делим первое на второе - получаем коэффициент (количество точек в одном мм).
При формировании отчета все размеры задавай в мм, а для пересчета в точки умножай на получившийся коэффициент.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 26.3.2009, 14:59
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


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

Тема закрытаНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.12.2024, 21:37