views:

35

answers:

0

The problem is that my application only prints the first document fine. The second document is empty, only the page number is printed, the rest of the page is empty.

In Qt4, I'm initializing the printer in the main.cpp in the following way:

mw->printer = new QPrinter(QPrinter::HighResolution);
mw->printer->setPaperSize(QPrinter::A5);
mw->printer->setNumCopies(2);
mw->printer->setColorMode(QPrinter::GrayScale);

QPrintDialog *dialog = new QPrintDialog(mw->printer, mw);
dialog->setWindowTitle(QObject::tr("Printer Setup"));
if (dialog->exec() == QDialog::Accepted)
{
    mw->printer->setFullPage(TRUE);
    return a.exec ();
}

This works fine for printing the first document from the application:

qDebug("Printing");
QPainter p;
if (!p.begin(printer))
{
    qDebug("Printing aborted");
    return;
}
Q3PaintDeviceMetrics metrics(p.device());
int dpiy = metrics.logicalDpiY();
int dpix = metrics.logicalDpiX();
int tmargin = (int) ((marginTop / 2.54) * dpiy);
int bmargin = (int) ((marginBottom / 2.54) * dpiy);
int lmargin = (int) ((marginLeft / 2.54) * dpix);
int rmargin = (int) ((marginRight / 2.54) * dpix);
QRect body(lmargin, tmargin,
           metrics.width() - (lmargin + rmargin),
           metrics.height() - (tmargin + bmargin));
QString document;
/* ... app logic to write a richtext document */
Q3SimpleRichText richText(QString("<qt>%1</qt>").arg(document),
                          QFont("Arial", fontSize));
richText.setWidth(&p, body.width());
QRect view(body);
int page = 1;
do {
    // draw text
    richText.draw(&p, body.left(), body.top(), view, colorGroup());
    view.moveBy(0, body.height());
    p.translate(0, -body.height());
    // insert page number
    p.drawText(view.right()  - p.fontMetrics().width(QString::number(page)),
               view.bottom() + p.fontMetrics().ascent() + 5,
               QString::number(page));
    // exit loop on last page
    if (view.top () >= richText.height ()) break;
    printer->newPage();
    page++;
} while (TRUE);
if (!p.end()) qDebug("Print painter yielded failure");

But when this routine runs the second time, it does not print the document. It will just print an empty page but still with the page number on it. This worked fine before with Qt3.