Russian Qt Forum
Сентябрь 21, 2024, 09:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: и снова Landscape...  (Прочитано 5858 раз)
romanick
Гость
« : Март 25, 2011, 11:51 »

Привет.
Вот теперь и я наткнулся на траблы с setOrientation(QPrinter::Landscape)  Смеющийся
Кто не в курсе, проблема в том что QPrinter никак не реагирует на этот метод.
Проблема уже решена или нет?

Вот ссылки что нашёл по этой теме, но нигде нет решения кроме ручного поворота того что надо печатать перед отсылкой на принтер:
http://www.prog.org.ru/topic_4190_0.html
http://www.prog.org.ru/topic_6422_0.html
Записан
romanick
Гость
« Ответ #1 : Март 26, 2011, 15:42 »

В общем решение есть, но оно не полное.
QPrinter::setOrientation работает только на неактивном принтере.

Вот так:
Код:
printer_.setOrientation(QPrinter::Landscape);
QPainter painter(&printer_);

но не так:
Код:
QPainter painter(&printer_);
printer_.setOrientation(QPrinter::Landscape);

Т.е. можно задать ориентацию только для всех страниц сразу, а не по отдельности. Печально.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #2 : Март 26, 2011, 20:37 »

А так?:
Код:
printer_.setOrientation(QPrinter::Landscape);
{
    QPainter painter(&printer_);
    ...
}
printer_.setOrientation(QPrinter::Portrait);
{
    QPainter painter(&printer_);
    ...
}

ЗЫЖ Кстати приветствую! Как там наш репортвью поживает ? %)
Записан

Гугль в помощь
romanick
Гость
« Ответ #3 : Март 28, 2011, 08:40 »

А так?:
Код:
printer_.setOrientation(QPrinter::Landscape);
{
    QPainter painter(&printer_);
    ...
}
printer_.setOrientation(QPrinter::Portrait);
{
    QPainter painter(&printer_);
    ...
}

ЗЫЖ Кстати приветствую! Как там наш репортвью поживает ? %)

Приветствую! Если сделать так, то получится столько документов в очереди печати сколько страниц в репорте. Нехорошо.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #4 : Март 28, 2011, 09:41 »

Вот. Заглянул сейчас в доку по setOrientation():
Цитировать
On Windows, this option can be changed while printing and will take effect from the next call to newPage().
On Mac OS X, changing the orientation during a print job has no effect.

Т.е. действительно в общем случае метод не работает во время набивки printing job. Видимо самым правильным будет, при обработке страницы со сменённой ориентацией, перезапускать job и промежутке менять ориентацию.
Записан

Гугль в помощь
meego_man
Гость
« Ответ #5 : Март 28, 2011, 17:10 »

а сам painter не думали повернуть просто? Документ будет один, а вот страницы рендериться будут как хотите Улыбающийся
Записан
romanick
Гость
« Ответ #6 : Март 29, 2011, 10:50 »

а сам painter не думали повернуть просто? Документ будет один, а вот страницы рендериться будут как хотите Улыбающийся

Спасибо за идею. Ларчик действительно просто открывался. Может быть кому пригодится:

Код:
painter.rotate(90); // поворачиваем относительно (0,0)
painter.translate(0, -painter.viewport().width()); // смещаемся на ширину вьюпорта влево
double s = (double)painter.viewport().height() / (double)painter.viewport().width();
painter.scale(s, s); // растягиваем height->width

scene.render(&painter);
Записан
alex7annet
Гость
« Ответ #7 : Июль 19, 2011, 20:12 »

У меня в на лине qprinter начал реагировать на ориентацию после:
Код:
printer->setOutputFormat(QPrinter::PostScriptFormat);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.115 секунд. Запросов: 23.