Russian Qt Forum

Qt => Печать => Тема начата: romanick от Март 25, 2011, 11:51



Название: и снова Landscape...
Отправлено: romanick от Март 25, 2011, 11:51
Привет.
Вот теперь и я наткнулся на траблы с setOrientation(QPrinter::Landscape)  ;D
Кто не в курсе, проблема в том что QPrinter никак не реагирует на этот метод.
Проблема уже решена или нет?

Вот ссылки что нашёл по этой теме, но нигде нет решения кроме ручного поворота того что надо печатать перед отсылкой на принтер:
http://www.prog.org.ru/topic_4190_0.html
http://www.prog.org.ru/topic_6422_0.html


Название: Re: и снова Landscape...
Отправлено: romanick от Март 26, 2011, 15:42
В общем решение есть, но оно не полное.
QPrinter::setOrientation работает только на неактивном принтере.

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

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

Т.е. можно задать ориентацию только для всех страниц сразу, а не по отдельности. Печально.


Название: Re: и снова Landscape...
Отправлено: navrocky от Март 26, 2011, 20:37
А так?:
Код:
printer_.setOrientation(QPrinter::Landscape);
{
    QPainter painter(&printer_);
    ...
}
printer_.setOrientation(QPrinter::Portrait);
{
    QPainter painter(&printer_);
    ...
}

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


Название: Re: и снова Landscape...
Отправлено: romanick от Март 28, 2011, 08:40
А так?:
Код:
printer_.setOrientation(QPrinter::Landscape);
{
    QPainter painter(&printer_);
    ...
}
printer_.setOrientation(QPrinter::Portrait);
{
    QPainter painter(&printer_);
    ...
}

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

Приветствую! Если сделать так, то получится столько документов в очереди печати сколько страниц в репорте. Нехорошо.


Название: Re: и снова Landscape...
Отправлено: navrocky от Март 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 и промежутке менять ориентацию.


Название: Re: и снова Landscape...
Отправлено: meego_man от Март 28, 2011, 17:10
а сам painter не думали повернуть просто? Документ будет один, а вот страницы рендериться будут как хотите :)


Название: Re: и снова Landscape...
Отправлено: romanick от Март 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);


Название: Re: и снова Landscape...
Отправлено: alex7annet от Июль 19, 2011, 20:12
У меня в на лине qprinter начал реагировать на ориентацию после:
Код:
printer->setOutputFormat(QPrinter::PostScriptFormat);