2

假设 aQWidget作为其他小部件的容器。此容器中的小部件是具有布局的小部件QVBoxLayout,应显示两列QLabel. 之后出现了一个新的小部件,它是QTableView.

我现在想将上述小部件呈现为带有可选文本的 PDF 文件。现在我设置了我QPrinter的和对应QPainter

QPrinter* printer = new QPrinter(selectedPrinterInfo, QPrinter::ScreenResolution);
printer->setPageSize(QPageSize(QPageSize::A4));
printer->setOrientation(QPrinter::Portrait);
printer->setFullPage(true);
printer->setPageSize(QPrinter::A4);
printer->setOutputFormat(QPrinter::PdfFormat);
printer->setPageMargins(QMarginsF(15,15,15,15),QPageLayout::Unit::Millimeter);
printer->setOutputFileName(fileName);
printer->setResolution(300);

QPainter painter(printer);

现在我用

myWidget->render(&painter);

这会创建一个质量很好的 PDF,但它只是一个带有 pdf 文件的图像。文本不可选择。我使它可选择的方法是首先渲染myWidgetQPicture然后重播到QPainter

QPicture picture;
myWidget->render(&picture);
painter.drawPicture(0,0,picture);

这会创建一个具有可选文本的 PDF。我对这种方法QPicture的问题在正确显示此表方面存在严重问题。例如,我设置AlternatingRowColorstrue,现在行颜色与网格线重叠。那么是否有任何方法可以QWidget直接使用QPainterPDF 或任何其他方法来执行此操作而不使用QPicture

4

0 回答 0