qt-nubie
27th March 2012, 09:43
with the code below, i cannot print my image (not shown up). how to solve this? thank in advance.
#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();
}
sorry, i'm not good at english.
#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();
}
sorry, i'm not good at english.