0

qtを使用して複数のテーブル(qtablewidget)オブジェクトを単一のpdfで印刷しようとしています。

( https://forum.qt.io/topic/80501/qpainter-howto-draw-table/7 )で提供されているコードを使用して、1 つの表を印刷できます。

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();

ただし、複数のテーブルを印刷しようとすると、コードは失敗します。複数の QPainters を作成すると、qt は複数の pdf を出力し、各 pdf に 1 つのテーブルが含まれます。1 つの 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 に答える