c++ - 使用 QPrintPreviewDialog 时内容不显示预览

标签 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新手。

最佳答案

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

printer.setResolution(QPrinter::HighResolution);

使文本出现在预览窗口中。 由于您尝试设置高分辨率,我认为您还需要相应地缩放您的画家,使其与 View /页面大小相对应。

关于c++ - 使用 QPrintPreviewDialog 时内容不显示预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18731868/

相关文章:

c++ - QT 在错误的类中寻找插槽

c++ - DirectX:渲染到 Texture2DArray,并在计算着色器中从中加载

c++ - 在回溯期间检索 sigcontext

c++ - 使用着色器在 OpenGL 中绘制 spritesheet 的技术

c++ - 比较 float 的位表示

c++ - 动态添加行到 TableView

c++ - 如何向 QSortFilterProxyModel 添加额外的行

c++ - Qt - 如何设置音频播放从缓冲区的开头开始?

c++ - 在 C++ 中处理 UTF-8

c++ - 删除 msvc dll 依赖以运行 qt 应用程序