当前位置: 代码网 > it编程>编程语言>C/C++ > QT使用QChart绘制饼图

QT使用QChart绘制饼图

2024年11月20日 C/C++ 我要评论
饼图没有坐标轴,也不需要坐标轴使用的系列是qpieseries饼图里面一个一个的块称为切片举例:绘制一个饼图,点击对应切片可以让切片分离1、创建图表视图并开启抗锯齿//1、创建图表视图qchartvi

饼图没有坐标轴,也不需要坐标轴

使用的系列是qpieseries

饼图里面一个一个的块称为切片

举例:

绘制一个饼图,点击对应切片可以让切片分离

1、创建图表视图并开启抗锯齿

//1、创建图表视图
qchartview * view = new qchartview(this);
//开启抗锯齿
view -> setrenderhint(qpainter::antialiasing);

2、创建图表并将图表设置给图表视图

//2.创建图表
qchart * chart = new qchart();
 
//3.将图表设置给视图
view -> setchart(chart);
 
//设置标题
chart -> settitle("饼图");
chart -> legend() -> show(); //显示或者隐藏图例(默认显示)

3、创建饼图系列,并给系列添加切片,并设置切片的相关属性,并绑定饼图系列的信号

//创建系列,饼图没有坐标轴
qpieseries * pie = new qpieseries(this);
//添加切片
//参数1:对应的图例名和标签名(标签默认不显示)
//参数2:占据的数值
qpieslice * ps1 = new qpieslice("c语言", 40, this);
pie -> append(ps1);
qpieslice * ps2 = new qpieslice("c++", 30, this);
pie -> append(ps2);
 
//也可以直接在append中指定
pie -> append("java", 25);
pie -> append("c#", 5);
 
//设置中间圆孔的大小,值不能超过1
pie -> setholesize(0.2);
 
//获取饼图的切片
//并设置切片的属性
auto p1 = pie -> slices().at(0);
 
//获取切片占的百分比,是一个小数
auto per = p1 -> percentage();
 
//设置切片的标签提示
p1 -> setlabel("c语言占" + qstring::number(per * 100) + "%");
p1 -> setlabelvisible(true);
 
//p1->setpen()//设置画笔,改变轮廓
p1 -> setbrush(qt::red); //改变填充
 
//点击信号,某个切片被点击了就会发出信号,信号参数告诉了是哪一个切片被点击了
connect(pie, & qpieseries::clicked, this, [ = ](qpieslice * p) {
    //将被点击的切片和饼图分离
    if (p -> isexploded()) {
        p -> setexploded(false);
    } else {
        p -> setexploded(true);
    }
 
});

4、将系列添加到图表中

//添加系列
chart->addseries(pie);

完整代码:

#ifndef widget_h
#define widget_h
 
#include <qwidget>
#include<qtcharts>
#include<qhboxlayout>
#include<qpieslice>
#include<qpieseries>
#include<qbarseries>
#include<qbarset>
#include<qareaseries>
 
class widget : public qwidget
{
    q_object
 
public:
    widget(qwidget *parent = nullptr) : qwidget(parent)
    {
        resize(800,600);
        qhboxlayout* h_box=new qhboxlayout(this);
        
        drawpiepic();
 
    }
    ~widget()=default;
 
    //画饼图
    void drawpiepic()
    {
        //1、创建图表视图
        qchartview* view=new qchartview(this);
        //开启抗锯齿
        view->setrenderhint(qpainter::antialiasing);
 
        this->layout()->addwidget(view);
 
        //2.创建图表
        qchart* chart=new qchart();
 
        //3.将图表设置给视图
        view->setchart(chart);
 
 
        //设置标题
        chart->settitle("饼图");
        chart->legend()->show();//显示或者隐藏图例(默认显示)
 
        //创建系列,饼图没有坐标轴
        qpieseries* pie=new qpieseries(this);
        //添加切片
        //参数1:对应的图例名和标签名(标签默认不显示)
        //参数2:占据的数值
        qpieslice* ps1=new qpieslice("c语言",40,this);
        pie->append(ps1);
        qpieslice* ps2=new qpieslice("c++",30,this);
        pie->append(ps2);
 
        //也可以直接在append中指定
        pie->append("java",25);
        pie->append("c#",5);
 
        //设置中间圆孔的大小,值不能超过1
        pie->setholesize(0.2);
 
        //获取饼图的切片
        //并设置切片的属性
        auto p1=pie->slices().at(0);
 
        //获取切片占的百分比,是一个小数
        auto per=p1->percentage();
 
        //设置切片的标签提示
        p1->setlabel("c语言占"+qstring::number(per*100)+"%");
        p1->setlabelvisible(true);
 
        //p1->setpen()//设置画笔,改变轮廓
        p1->setbrush(qt::red);//改变填充
 
        //点击信号,某个切片被点击了就会发出信号,信号参数告诉了是哪一个切片被点击了
        connect(pie,&qpieseries::clicked,this,[=](qpieslice* p){
            //将被点击的切片和饼图分离
            if(p->isexploded())
            {
                p->setexploded(false);
            }
            else
            {
                p->setexploded(true);
            }
 
        });
 
        //添加系列
        chart->addseries(pie);
 
    }
 
 
};
#endif // widget_h

到此这篇关于qt使用qchart绘制饼图的文章就介绍到这了,更多相关qt qchart绘制饼图内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com