PrintPreview 不显示任何内容

PrintPreview shows nothing

本文关键字:任何内 显示 PrintPreview      更新时间:2023-10-16

我在QT的QPrintPreviewDialog窗口中看不到任何内容,为什么会这样?缺少什么?

   QPrinter printer;
   printer.setOutputFileName("sample.pdf");
   printer.setPaperSize(QPrinter::A4);
   printer.setFullPage(true);
   QPainter painter(&printer);

   painter.drawLine(10, 10, 200, 200);
   QPrintPreviewDialog * preview = new QPrintPreviewDialog(&printer, this);
   if (preview->exec() == QDialog::Accepted)
   {
   }
这不是

使用QPrintPreviewDialog的文档,文档清楚地指出,在使用QPrinter对象构造QPrinterPreviewDialog之后,在调用QPrintPreviewDialog::exec()之前,您应该paintRequested()信号连接到自定义插槽(您应该在关联的QPrinter对象上绘画,并且您在那里绘制的所有内容都显示在QPrintPreviewDialog中)。

所以,如果我理解你试图做正确的事情,你应该定义一个插槽PreviewPaintRequest并在那里使用QPainter,你的代码应该是这样的:

在构造函数中:

QPrinter printer;
printer.setOutputFileName("sample.pdf");
printer.setPaperSize(QPrinter::A4);
printer.setFullPage(true);

QPrintPreviewDialog * preview = new QPrintPreviewDialog(&printer, this);
connect(preview, SIGNAL(paintRequested(QPrinter*)), this, SLOT(PreviewPaintRequested(QPrinter*)));
if (preview->exec() == QDialog::Accepted)
{
}

PreviewPaintRequested(QPrinter* printer)插槽中:

{
    QPainter painter(printer);
    painter.drawLine(10, 10, 200, 200);
}