一、项目介绍
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饼状图内容请搜索<计算机技术网(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