c++ - 如何在 Qt 中保存 3DSurface?
问题描述
我正在尝试将 3DSurfaces 保存为 PDF 文件。曲面图的定义如下
Q3DSurface *surface = new Q3DSurface;
surface->addSeries(mySeries);
QWidget *container = QWidget::createWindowContainer(surface);
我正在使用以下代码将容器小部件写入 PDF 文件。
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("output.pdf");
QPainter painter(&printer);
double xscale = printer.pageRect().width() / double(container->width());
double yscale = printer.pageRect().height() / double(container->height());
double scale = qMin(xscale, yscale);
painter.translate(printer.paperRect().x() + printer.pageRect().width()/ 2,
printer.paperRect().y() + printer.pageRect().height()/2);
painter.scale(scale, scale);
painter.translate(-main->width()/ 2, -main->height()/ 2);
container->render(&painter);
这会保存一个带有容器大小的灰色补丁的 PDF 文件,但表面本身不会复制到文件中。非常感谢所有帮助。
解决方案
我为我的问题找到了更好的答案。Q3DSurface 继承了 QAbstract3DGraph 类的 renderToImage 函数,可以如下使用该函数将表面渲染成图像文件:
Q3DSurface *surface = new Q3DSurface;
surface->addSeries(mySeries);
QImage image = surface->renderToImage();
image.save("output.png");
推荐阅读
- c# - 将动态参数传递给 Linq ...OfType
- firebase - Vuexfire 将 Firestore 集合绑定到 Object 而不是 List
- knockout.js - 如何使用knockoutJS为同一页面中的多个表创建多个分页?
- mysql - MySQL UPDATE with SELECT GREATEST (date)
- vector - 3D 中的矢量旋转
- wpf - WPF - 自定义窗口样式并使用图像最小化、最大化和关闭由不同数据触发的按钮
- google-chrome-extension - Google Chrome 扩展 onSingInChanged 总是返回 signedIn = true
- typescript - 获取给定 CompilerOptions 的 SourceFile 的输出位置
- javascript - javascript signalR忽略无效证书
- c# - C# WPF RichTextBox - 超链接