C++ 如何在QWidget中获取QTDataVizalization的QPixmap并保存到文件?

C++ 如何在QWidget中获取QTDataVizalization的QPixmap并保存到文件?,c++,windows,qt,C++,Windows,Qt,我正在尝试使用QtDataVisualizationQ3DScatter制作一个三维散点图,然后获取该散点图的QPixmap并保存到文件中 这是我的密码 //set up the 3D scatter chart QtDataVisualization::Q3DScatter *graph = new QtDataVisualization::Q3DScatter(); QWidget *widget = QWidget::createWindowContainer(gr

我正在尝试使用QtDataVisualizationQ3DScatter制作一个三维散点图,然后获取该散点图的QPixmap并保存到文件中

这是我的密码

    //set up the 3D scatter chart
    QtDataVisualization::Q3DScatter *graph = new QtDataVisualization::Q3DScatter();
    QWidget *widget = QWidget::createWindowContainer(graph);
    QtDataVisualization::QScatter3DSeries *series = new QtDataVisualization::QScatter3DSeries;

    //set up the data variable
    QtDataVisualization::QScatterDataArray data;

    //add data to the data variable
    for (int i; i < nodes.size(); i = i + 1)
    {
        data << QVector3D(x[i], y[i], z[i]);
    }

    //add the data to series
    series->dataProxy()->addItems(data);

    //add series to graph
    graph->addSeries(series);

    //set the graph properties
    graph->activeTheme()->setType(QtDataVisualization::Q3DTheme::ThemeArmyBlue);
    graph->scene()->activeCamera()->setCameraPreset(QtDataVisualization::Q3DCamera::CameraPresetIsometricRight);
    graph->seriesList().at(0)->setMesh(QtDataVisualization::QAbstract3DSeries::MeshPoint);
    graph->setShadowQuality(QtDataVisualization::QAbstract3DGraph::ShadowQuality(0));

    //widget->show();
    const QRect rectangle(0,0,widget->width(),widget->height());
    QPixmap test = widget->grab(rectangle);
    test.save(QString(workingDirectory) + "/test.png", "PNG");
//设置三维散点图
QtDataVisualization::Q3DScatter*图形=新的QtDataVisualization::Q3DScatter();
QWidget*widget=QWidget::createWindowContainer(图形);
QtDataVisualization::QScatter3DSeries*series=新的QtDataVisualization::QScatter3DSeries;
//设置数据变量
QtDataVisualization::QScatterDataArray数据;
//向数据变量添加数据
对于(int i;i附加项(数据);
//向图形中添加系列
图形->添加系列(系列);
//设置图形属性
graph->activeTheme()->setType(QtDataVisualization::Q3DTheme::ThemeArmyBlue);
图形->场景()->activeCamera()->setCameraPreset(QtDataVisualization::Q3DCamera::CameraPresetIsometricRight);
graph->seriesList().at(0)->setMesh(QtDataVisualization::QAbstract3DSeries::MeshPoint);
graph->setShadowQuality(QtDataVisualization::QAbstract3DGraph::ShadowQuality(0));
//widget->show();
常量矩形(0,0,小部件->宽度(),小部件->高度());
QPixmap测试=小部件->抓取(矩形);
保存(QString(workingDirectory)+“/test.png”、“png”);

当我取消对“widget->show()”的注释时,test.png只是一个白色的正方形,但是widget会出现并显示完整的3DScatter。当我注释掉“widget->show()”时,test.png仍然是一个白色的正方形。我似乎无法实现这一点。

在注释
widget->show()
时,添加一个
widget->repaint()
调用以强制在将小部件保存到文件中之前绘制/渲染它。

这仍然没有任何作用。我仍然得到一个白色框:/感谢您尝试使用什么是
节点
x
y
z