0

我正在尝试使用 qt 在单个 pdf 中打印多个表(qtablewidget)对象。

我可以使用( https://forum.qt.io/topic/80501/qpainter-howto-draw-table/7)中提供的代码打印一张表

QPixmap pix(widget->size());
QPainter painter(&pix);
widget->render(&painter);
painter.end();
QPrinter printer(QPrinter::HighResolution);
printer.setOrientation(QPrinter::Landscape);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setPaperSize(QPrinter::A4);
printer.setOutputFileName("test.pdf"); // will be in build folder

painter.begin(&printer);
painter.drawPixmap(0, 0, pix);
painter.end();

但是,如果我尝试打印多个表,则代码会失败。如果我创建多个 QPainter,qt 只会输出多个 pdf,每个 pdf 中有一个表。我正在尝试使用一个 QPainter 和多个 QPixmap 来做到这一点,但到目前为止还没有成功。

有人可以让我知道如何解决吗?

任何帮助,将不胜感激

问候,

4

1 回答 1

0

代码如何失败?下面应该可以工作(我没有测试过)。注意没有手动对象生命周期管理:让编译器为你做。AQPainter是一个适当的 C++ 类,并且知道如何释放其资源而无需手动调用QPainter::end().

void printWidgets(QWidgetList widgets) {
  QVector<QPixmap> pixmaps;
  for (auto *w : widgets) {
    QPixmap pix(w->size());
    QPainter painter(pix);
    w->render(&painter);
    pixmaps.push_back(pix);
  }

  QPrinter printer(QPrinter::HighResolution);
  printer.setOrientation(QPrinter::Landscape);
  printer.setOutputFormat(QPrinter::PdfFormat);
  printer.setPaperSize(QPrinter::A4);
  printer.setOutputFileName("test.pdf"); // will be in build folder

  QPainter painter(&printer);
  QPoint pos;    
  for (auto &pix : qAsConst(pixmaps)) {
    painter.drawPixmap(pos, pix);
    pos.ry() += pix.height(); // stack the output vertically
  }
}
于 2018-08-20T14:32:00.550 回答