C++ 如何在Qt中保存3DSurface?
我正在尝试将3DSurfaces保存为PDF文件。曲面图的定义如下所示C++ 如何在Qt中保存3DSurface?,c++,qt,qt3d,C++,Qt,Qt3d,我正在尝试将3DSurfaces保存为PDF文件。曲面图的定义如下所示 Q3DSurface *surface = new Q3DSurface; surface->addSeries(mySeries); QWidget *container = QWidget::createWindowContainer(surface); 我使用以下代码将容器小部件写入PDF文件 QPrinter printer(QPrinter::HighResolution); printer.setOut
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");
尝试用QGuiApplication::screens()[0]->grabWindow(container->winId(),0,0,container->width(),container->height())制作一个pixmap;把它放在标签上或其他东西上,而不是我原来文章中的最后一块,我现在有了QPixmap pmap=QGuiApplication::screens()[0]->grabWindow(容器->winId(),0,0,容器->宽度(),容器->高度());pmap.save(“output.pdf”);这将在我的容器出现的同一位置拍摄IDE的屏幕截图,但它不会捕获我的容器。然后使用父对象的winId不太确定我建议的是否是黑客行为。我想我明天可以试着凑一个pdfgen.exe,然后给出岩芯的样本。在我的经验中,我从来没有使用过3dsurface。qt内置了很多非常方便的类,但有时“使”目标变为“哑巴”,在感知之前从a到b是更好的方法。我认为无论出于什么原因,程序都不会在调用grabWindow之前渲染容器窗口。我通过添加一个按钮来解决这个问题,按下这个按钮可以保存容器。这允许首先在屏幕上渲染图像,然后通过grabWindow捕获图像。这不是最优雅的解决方案,但它很有效。谢谢你的帮助!