在多个页面上打印 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");
}
我有这样的代码:
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");
}