使用QPrintPreviewDialog时,内容不会显示为预览

时间:2013-09-11 02:50:22

标签: c++ qt

我在Window 7上使用Qt版本4.8.4。我没有条件在Mac,Linux等其他平台上测试此问题...我使用以下代码预览内容

void DemoClass::on_btnOK_clicked()
{
    QPrinter printer;
    printer.setResolution(QPrinter::HighResolution);
    printer.setPaperSize(QPrinter::A4);
    printer.setOrientation(QPrinter::Portrait);
    printer.setFullPage(true);

    QPrintPreviewDialog *printPreview = new QPrintPreviewDialog(&printer);
    connect(printPreview, SIGNAL(paintRequested(QPrinter*)), this, SLOT(print(QPrinter*)));

    printPreview->setWindowTitle("Preview Dialog");
    Qt::WindowFlags flags(Qt::WindowTitleHint);
    printPreview->setWindowFlags(flags);
    printPreview->exec();
}

void DemoClass::print(QPrinter *printer)
{
    QPainter painter(printer);
    painter.setRenderHints(QPainter::Antialiasing |
                       QPainter::TextAntialiasing |
                       QPainter::SmoothPixmapTransform, true);

    painter.drawText(100, 100, "Hello World! 123");
}

按下OK按钮,会出现以下对话框:

Cannot show the preview content

如您所见,页面为空白。该页面不包含任何内容。然后我单击预览对话框中的页面设置按钮,显示:

Cannot show the preview content

...在不更改任何内容的情况下,单击“确定”,然后预览变为正确

Cannot show the preview content

我真的不明白原因是什么。如何在不更改页面设置的情况下正确显示内容?

你有解决方案吗?

P / S: 我看过this post,与我的问题类似。作者建议使用QPageSetupDialog对象,我尝试了不同的方法。但我仍然没有解决问题,因为我是Qt的新手。

1 个答案:

答案 0 :(得分:0)

我认为问题在于为打印机设置高分辨率,根据文档记录,1200 dpi。删除以下行

printer.setResolution(QPrinter::HighResolution);

使文本显示在预览窗口中。 由于您尝试设置高分辨率,我认为您还需要相应地缩放您的画家,以便它对应于视图/页面大小。