Russian Qt Forum

Qt => Печать => Тема начата: negative от Ноябрь 08, 2009, 21:58



Название: Печать с растягиванием/ужиманием
Отправлено: negative от Ноябрь 08, 2009, 21:58
Здравствуйте!
Имеется QFrame произвольного размера. Требуется вывести ее на печать, таким образом, чтобы все содержимое оказалось на 1м листе. Печать сделанная по мануалам, просто берет из левого верхнего угла кусок какого-то постоянного размера.
Есть ли какой-то встроенный метод, решающий такую проблему? В документации на троллтехе как-то ничего не нашел  :-\


Название: Re: Печать с растягиванием/ужиманием
Отправлено: Makss от Ноябрь 08, 2009, 23:08
с помощью этой функции
Код:
QPixmap QPixmap::grabWidget ( QWidget * widget, const QRect & rectangle )

в QPixmap получите всё содержимое вашего фрейма, потом у QPixmap есть фукнция scaled - функция мастшабирования содержимого, отмасшатбируйте как вам нада, и потом QPixmap отправляйте на печать


Название: Re: Печать с растягиванием/ужиманием
Отправлено: negative от Ноябрь 09, 2009, 21:49
Что-то я не понимаю. Вот был такой код:

Код:
   QPrinter printer;
   QPrintPreviewDialog preview( &printer, this );
   connect( &preview, SIGNAL(paintRequested(QPrinter *) ),
                      this, SLOT(printDocument(QPrinter*)));
   preview.exec();

Вот, я могу получить
QPixmap pix = QPixmap::grabWidget(this, this->geometry());
А дальше-то куда его совать?)


Название: Re: Печать с растягиванием/ужиманием
Отправлено: negative от Ноябрь 09, 2009, 21:53
Код:
void mainArea::printPreview()
{
   QPrinter printer;
   QPixmap pix = QPixmap::grabWidget(this, 0,0,100,100);
   QPrintPreviewDialog preview( &printer, this );
   connect( &preview, SIGNAL(paintRequested(QPrinter *) ),
                      this, SLOT(printDocument(pix)));
   preview.exec();
}

void mainArea::printDocument( QPixmap *printer_ )
{
    this->render( printer_ );
}

Выводит на превью пустоту


Название: Re: Печать с растягиванием/ужиманием
Отправлено: Makss от Ноябрь 10, 2009, 13:23
С помощью QPainter которому в качестве контекста рисования указываете ваш принтер - рисуете этот пиксмап.

p.s. читайте Ассистента там много чего есть, это самая лудшая документация