在多个页面上打印 QGraphicsScene

Print QGraphicsScene on multiply pages

我有这样的代码:

QPrinter printer;
if (QPrintDialog(&printer).exec() == QDialog::Accepted) {
    QPainter painter(&printer);
    scene->render(&painter, QRectF(0, 0, 10000, 10000), QRectF(0, 0, 1024, 1024), Qt::KeepAspectRatioByExpanding);
}

我希望场景内容会被缩放并打印在多页上。缩放效果很好,但 pdf 文件(我使用 pdf 打印机)仅包含 1 页:缩放场景的左上角。

Qt 5.15。 Qt += 项目文件中的 printsupport 选项。

多页打印,你得自己管。

这是我使用的代码:

void printScene(QGraphicsScene* scene, qreal pageHeight, QPrinter& printer, int pageCount)
{
    if (scene)
    {
        if (pageCount < 1)
        {
            LOG_WARNING() << QString("invalid page count: %1. Defaulting to 1").arg(pageCount);
            pageCount = 1;
        }

        QRectF pageRect(0, 0, scene->sceneRect().width(), pageHeight);
        qreal  paperHeight = scene->sceneRect().height();

        QPainter painter(&printer);

        for (int page = 0; page < pageCount; ++page)
        {
            scene->render(&painter, QRectF(), pageRect);

            paperHeight -= pageHeight;
            pageRect.translate(0, pageHeight);
            pageRect.setHeight(qMin(pageHeight, paperHeight));

            if ((page + 1) < pageCount)
                printer.newPage();
        }
    }
    else
        LOG_ERROR() << ("attempt to print a null scene");
}