c/c++语言开发共享QT利用QPainter绘制三维饼状图

一、项目介绍本文介绍利用qpainter实现三维饼状图的绘制,由于qt中没有三维饼状图的绘制组件,因此只能自行绘制。二、项目基本配置新建一个qt案例,项目名称为“pietest&rdquo

一、项目介绍

c/c++开发分享QT利用QPainter绘制三维饼状图介绍利用qpainter实现三维饼状图的绘制,由于qt中没有三维饼状图的绘制组件,因此只能自行绘制。

二、项目基本配置

新建一个qt案例,项目名称为“pietest”,基类选择“qwidget”,取消选中创建ui界面复选框,完成项目创建。

三、ui界面设置

无ui界面

四、主程序实现

4.1 widget.h头文件

头文件中只需声明paintevent函数:

private:      void paintevent( qpaintevent* e);  

4.2 widget.cpp源文件

paintevent函数定义如下:

void widget::paintevent( qpaintevent* e)  {      int start=240;//定义起始角度      int ang=30;//定义角度范围        qpainter painter(this);      // 去除画笔      painter.setpen(qt::nopen);      // 设置反锯齿      painter.setrenderhint(qpainter::antialiasing);      //三维饼状图      // 顶层圆面      qrectf rect_top(10.0, 20.0, 280.0, 160.0);      // 底层圆面(宽高相同,y在顶层圆面下方40处)      qrectf rect_bottom(10.0, 60.0, 280.0, 160.0);      // 中间矩形      qrectf rect_midd(10.0, 100.0, 280.0, 40.0);      // 扇形起始角度      int startangle = start * 16;      //从230度      // 扇形覆盖范围      int spanangle = ang * 16;        painter.setbrush(qcolor(97,35,35,255));//饼状图高度颜色      // 绘制底层圆面      painter.drawellipse(rect_bottom);      // 绘制中间矩形      painter.drawrect(rect_midd);        painter.setbrush(qcolor(qt::darkyellow));//饼状图占比高度颜色      // 绘制底层扇形      painter.drawpie(rect_bottom, startangle, spanangle);        // 扇形的弦与弧的交点      double pi = 3.1415926;      double dx1 = rect_top.width() * 0.5 * cos(start * pi / 180);      double dy1 = rect_top.height() * 0.5 * sin(start * pi / 180);        double dx2 = rect_top.width() * 0.5 * cos((start+ang) * pi / 180);      double dy2 = rect_top.height() * 0.5 * sin((start+ang) * pi / 180);        // 求交点的坐标值      qpointf posbackcenter = qpointf(rect_top.center());      double dx1 = posbackcenter.x() + dx1 + 0.5;      double dy1 = posbackcenter.y() - dy1 + 0.5;        double dx2 = posbackcenter.x() + dx2 + 0.5;      double dy2 = posbackcenter.y() - dy2 + 0.5;            // 记录交点          qpointf topleft = qpointf(dx1, dy1);          qpointf bottomright = qpointf(dx2, dy2) + qpointf(0,40);          qpointf bottomleft = topleft + qpointf(0,40);          painter.setbrush(qcolor(qt::darkyellow));            // 绘制连接扇形的区域          qpolygonf path;          path << topleft << qpointf(dx2,dy2) << bottomright << bottomleft;          painter.drawpolygon(path);            // 绘制顶层圆面          painter.setbrush(qcolor(156,56,56,255));          painter.drawellipse(rect_top);            // 绘制顶层扇形          painter.setbrush(qcolor(qt::yellow));          painter.drawpie(rect_top, startangle, spanangle);        qwidget::paintevent(e);  }

其部分示意为:

QT利用QPainter绘制三维饼状图

五、效果演示

完整效果如下:

QT利用QPainter绘制三维饼状图

到此这篇关于qt利用qpainter绘制三维饼状图的文章就介绍到这了,更多相关qt qpainter饼状图内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

需要了解更多c/c++开发分享QT利用QPainter绘制三维饼状图,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/1237856.html

(0)
上一篇 2022年9月11日
下一篇 2022年9月11日

精彩推荐