c++ - 如何在 QWidget 中获取 QtDataVizualisation 的 QPixmap 并保存到文件?

标签 c++ windows qt

我正在尝试使用 QtDataVisualizationQ3DScatter 制作 3D 散点图,然后获取它的 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");

当我取消注释“widget->show()”时,test.png 只是一个白色方 block ,但小部件出现并显示完整的 3DScatter。当我注释掉“widget->show()”时,test.png 仍然只是一个白色方 block 。我似乎无法让它工作。

最佳答案

在评论 widget->show() 时,添加一个 widget->repaint() 调用以强制在将小部件保存到文件之前对其进行绘制/渲染.

关于c++ - 如何在 QWidget 中获取 QtDataVizualisation 的 QPixmap 并保存到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57415727/

相关文章:

c++ - IAT-物理地址中的dll-指针?

c++ - 从 QLabel 获取 QPixmap

android - 在 Linux 上为 Android 设置 Marble 时无法使用 CMake 配置

c++ - Qt信号/插槽实际上如何与.ui文件中的元素耦合?

c++ - 如何下载 FaceBook 用户照片

c++ - Qt - QPushButton 文本格式

linux - 从不同域访问多个网站

c++ - Qt 容器如何作为参数传递给共享库的函数?

c++ - 如何在 C++ 11 中迭代 std::tuple

windows - 令人沮丧的处理窗口消息(WM_XX)