Qt 小例子学习38 - 使用setUseOpenGL 获取图表图片

Qt 小例子学习38 - 使用setUseOpenGL 获取图表图片

main.cpp

#include <QApplication>

#include <QtCharts>
using namespace QtCharts;

#include <QDebug>
#include <QOpenGLWidget>
#include <QPainter>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget widget;
    widget.setLayout(new QVBoxLayout);

    QPushButton btn("save");
    QChartView chartView;

    widget.layout()->addWidget(&btn);
    widget.layout()->addWidget(&chartView);

    QLineSeries *series = new QLineSeries();
    series->setUseOpenGL(true); // this line cause a problem

    QLineSeries *series2 = new QLineSeries();

    constexpr double PI = 3.14159265359;
    for (int i = 0; i < 100; ++i)
    {
        double temp = i * PI / 6;
        series->append(temp, sin(temp));
    }

    for (int i = 0; i < 100; ++i)
    {
        double temp = i * PI / 6;
        series2->append(temp, cos(temp));
    }

    QChart *chart = new QChart();
    chart->legend()->hide();
    chart->addSeries(series);
    chart->addSeries(series2);
    chart->createDefaultAxes();
    chart->setTitle("Simple line chart example");

    chartView.setChart(chart);

    QObject::connect(&btn, &QPushButton::clicked, [&chartView]
    {
        QPixmap p = chartView.grab();
        QOpenGLWidget *glWidget = chartView.findChild<QOpenGLWidget *>();
        if (glWidget)
        {
            QPainter painter(&p);
            QPoint d =
            glWidget->mapToGlobal(QPoint()) - chartView.mapToGlobal(QPoint());
            painter.setCompositionMode(QPainter::CompositionMode_SourceAtop);
            painter.drawImage(d, glWidget->grabFramebuffer());
            painter.end();
        }
        p.save("test", "PNG");
    });
    widget.show();

    return a.exec();
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值