Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Qt中保存3DSurface?_C++_Qt_Qt3d - Fatal编程技术网

C++ 如何在Qt中保存3DSurface?

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

我正在尝试将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");

尝试用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捕获图像。这不是最优雅的解决方案,但它很有效。谢谢你的帮助!