PrintPreview什么都没显示

时间:2016-06-04 17:30:01

标签: c++ qt

我在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)
   {

   }

1 个答案:

答案 0 :(得分:0)

这不是documented使用QPrintPreviewDialog的方式,文档明确指出在使用QPrinterPreviewDialog对象构建QPrinter之后和调用{{1}之前},您应该将QPrintPreviewDialog::exec()信号连接到自定义插槽(您应该在关联的paintRequested()对象上绘制,并且您在那里绘制的所有内容都会显示在QPrinter)。

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

在你的构造函数中:

QPainter
<{1>}插槽中的

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)
{

}