Qt5 会破坏 QwtPlotRenderer 后记支持吗?

Posted

技术标签:

【中文标题】Qt5 会破坏 QwtPlotRenderer 后记支持吗?【英文标题】:Does Qt5 break QwtPlotRenderer postscript support? 【发布时间】:2015-09-22 11:55:32 【问题描述】:

我正在尝试使用QwtPlotRendererQwtPlot 的图像保存为附言文件。这似乎在 documentation 中得到支持,但是每当我使用“.ps”扩展名进行渲染时,什么都不会发生。

经过一番研究,似乎是 Qt5 removed postscript support from QPrinter。这是否意味着使用 Qt 5 时 Qwt 6.1.2 无法呈现为 postscript?

【问题讨论】:

谢天谢地,PDF 是事实上的页面描述语言,大多数打印机可以直接打印 PDF,而无需先将其转换为 PS。一般来说,这些天几乎不需要发布后记。 我一般同意,但这取决于您的应用程序。如果您尝试在 Adob​​e Illustrator 中操作文件,则使用 *.eps 文件比使用 *.pdf 文件要容易得多(或者我被付钱给我的人告诉我这样做)。 如果您打算以其他方式操作结果,例如注入您自己的代码(例如 make rgb -> cmy),则 Postscript 可能会更好 【参考方案1】:

很遗憾,确实如此。

如果我们查看qwt_plot_renderer.cpp 源代码,我们可以看到 postscript 支持没有扩展到 Qt 版本 5 和更高版本,几乎可以肯定是因为它是基于 QPrinter::PostScriptFormat 构建的,而 QPrinter::PostScriptFormat 已从 Qt 中删除.

// Excerpt from qwt_plot_renderer.cpp (ln 257)
else if ( fmt == "ps" )

#if QT_VERSION < 0x050000
#ifndef QT_NO_PRINTER
        QPrinter printer;
        printer.setOutputFormat( QPrinter::PostScriptFormat );
        printer.setColorMode( QPrinter::Color );
        printer.setFullPage( true );
        printer.setPaperSize( sizeMM, QPrinter::Millimeter );
        printer.setDocName( title );
        printer.setOutputFileName( fileName );
        printer.setResolution( resolution );

        QPainter painter( &printer );
        render( plot, &painter, documentRect );
#endif
#endif

也就是说,Qwt 确实支持 Qt 5 的各种可移植格式,包括 PDF 和 SVG,它们都是矢量图形,其中一种可能适用于大多数应用程序。

【讨论】:

以上是关于Qt5 会破坏 QwtPlotRenderer 后记支持吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt 中使用信号会破坏 DLL

为啥我的路由在调用破坏函数后会失败?

更新依赖项是不是会破坏向后兼容性(semver 主要版本更改)?

Qt5 在添加 Q_OBJECT 后发现编译出错的原因

怎样VS2013下安装Qt5的插件

刷新后登录会话被破坏