#include <QPrintDialog>
#include <QPrinter>
#include <QPainter>
#include <QThread>
#include <QDebug>
#include "documentprinter.h"
#include "document.h"
DocumentPrinter
::DocumentPrinter(Document
*document,
QObject *parent
) : m_printer(0),
m_document(document)
{
}
void DocumentPrinter::setDocument(Document *document)
{
m_document = document;
}
bool DocumentPrinter::exec()
{
DocumentPrinterWorker docPrinterWorker;
docPrinterWorker.moveToThread(&printerThread);
connect(this,
SIGNAL(printStarted
(QPrinter*,Document
*,
int,
int)),
&docPrinterWorker,
SLOT(printDocument
(QPrinter*,Document
*,
int,
int)));
dialog.setMinMax(1, m_document->numPages());
if (dialog.exec()) {
m_printer = dialog.printer();
printerThread.start();
emit printStarted(m_printer, m_document, 1, m_document->numPages());
emit printStarted(m_printer, m_document, dialog.fromPage(), dialog.toPage());
printerThread.quit();
printerThread.wait();
}
return true;
}
void DocumentPrinterWorker
::printDocument(QPrinter *printer, Document
*document,
int fromPage,
int toPage
) {
if (!printer && !document)
return;
printer->setResolution(300);
printer
->setPageMargins
(0,
0,
0,
0,
QPrinter::Point);
for (int i=fromPage; i<=toPage; i++) {
QImage image
("./images/logo.png");
painter.drawImage(0,0, image);
document
->render
(&painter, i,
QRectF(0,
0, printer
->width
(), printer
->height
()));
if (i < toPage)
printer->newPage();
}
painter.end();
}
#include <QPrintDialog>
#include <QPrinter>
#include <QPainter>
#include <QThread>
#include <QDebug>
#include "documentprinter.h"
#include "document.h"
DocumentPrinter::DocumentPrinter(Document *document, QObject *parent) :
QObject(parent),
m_printer(0),
m_document(document)
{
}
void DocumentPrinter::setDocument(Document *document)
{
m_document = document;
}
bool DocumentPrinter::exec()
{
QThread printerThread;
DocumentPrinterWorker docPrinterWorker;
docPrinterWorker.moveToThread(&printerThread);
connect(this, SIGNAL(printStarted(QPrinter*,Document*,int,int)),
&docPrinterWorker, SLOT(printDocument(QPrinter*,Document*,int,int)));
QPrintDialog dialog((QWidget *)parent());
dialog.setMinMax(1, m_document->numPages());
if (dialog.exec()) {
m_printer = dialog.printer();
printerThread.start();
if (dialog.printRange() == QAbstractPrintDialog::AllPages)
emit printStarted(m_printer, m_document, 1, m_document->numPages());
else if (dialog.printRange() == QAbstractPrintDialog::PageRange)
emit printStarted(m_printer, m_document, dialog.fromPage(), dialog.toPage());
printerThread.quit();
printerThread.wait();
}
return true;
}
void DocumentPrinterWorker::printDocument(QPrinter *printer, Document *document, int fromPage, int toPage)
{
if (!printer && !document)
return;
printer->setResolution(300);
printer->setPageMargins(0,0,0,0,QPrinter::Point);
QPainter painter(printer);
for (int i=fromPage; i<=toPage; i++) {
QImage image("./images/logo.png");
painter.drawImage(0,0, image);
document->render(&painter, i, QRectF(0, 0, printer->width(), printer->height()));
if (i < toPage)
printer->newPage();
}
painter.end();
}
To copy to clipboard, switch view to plain text mode
Bookmarks