首页 > 其他分享 >Qt实现扇形图

Qt实现扇形图

时间:2022-12-26 18:34:38浏览次数:37  
标签:slice Qt slices 实现 series markers 扇形 breakdownSeries mainSlice

#include "donutbreakdownchart.h"
#include "mainslice.h"
#include <QtCharts/QPieSlice>
#include <QtCharts/QPieLegendMarker>

QT_CHARTS_USE_NAMESPACE


DonutBreakdownChart::DonutBreakdownChart(QGraphicsItem *parent, Qt::WindowFlags wFlags)
: QChart(QChart::ChartTypeCartesian, parent, wFlags)
{
// create the series for main center pie
m_mainSeries = new QPieSeries();
m_mainSeries->setPieSize(0.7);
QChart::addSeries(m_mainSeries);
}

void DonutBreakdownChart::addBreakdownSeries(QPieSeries *breakdownSeries, QColor color)
{
QFont font("Arial", 8);

// add breakdown series as a slice to center pie
MainSlice *mainSlice = new MainSlice(breakdownSeries);
mainSlice->setName(breakdownSeries->name());
mainSlice->setValue(breakdownSeries->sum());
m_mainSeries->append(mainSlice);

// customize the slice
mainSlice->setBrush(color);
mainSlice->setLabelVisible();
mainSlice->setLabelColor(Qt::white);
mainSlice->setLabelPosition(QPieSlice::LabelInsideHorizontal);
mainSlice->setLabelFont(font);

// position and customize the breakdown series
breakdownSeries->setPieSize(0.8);
breakdownSeries->setHoleSize(0.7);
breakdownSeries->setLabelsVisible();
const auto slices = breakdownSeries->slices();
for (QPieSlice *slice : slices) {
color = color.lighter(115);
slice->setBrush(color);
slice->setLabelFont(font);
}

// add the series to the chart
QChart::addSeries(breakdownSeries);

// recalculate breakdown donut segments
recalculateAngles();

// update customize legend markers
updateLegendMarkers();
}

void DonutBreakdownChart::recalculateAngles()
{
qreal angle = 0;
const auto slices = m_mainSeries->slices();
for (QPieSlice *slice : slices) {
QPieSeries *breakdownSeries = qobject_cast<MainSlice *>(slice)->breakdownSeries();
breakdownSeries->setPieStartAngle(angle);
angle += slice->percentage() * 360.0; // full pie is 360.0
breakdownSeries->setPieEndAngle(angle);
}
}

void DonutBreakdownChart::updateLegendMarkers()
{
// go through all markers
const auto allseries = series();
for (QAbstractSeries *series : allseries) {
const auto markers = legend()->markers(series);
for (QLegendMarker *marker : markers) {
QPieLegendMarker *pieMarker = qobject_cast<QPieLegendMarker *>(marker);
if (series == m_mainSeries) {
// hide markers from main series
pieMarker->setVisible(false);
} else {
// modify markers from breakdown series
pieMarker->setLabel(QString("%1 %2%")
.arg(pieMarker->slice()->label())
.arg(pieMarker->slice()->percentage() * 100, 0, 'f', 2));
pieMarker->setFont(QFont("Arial", 8));
}
}
}
}

Qt实现扇形图_Qt

标签:slice,Qt,slices,实现,series,markers,扇形,breakdownSeries,mainSlice
From: https://blog.51cto.com/u_15515702/5970015

相关文章

  • Poisson Blending(Seamless clone)研究和实现
    PoissonBlending实现了非常棒的效果,可以看《自己动手,实现“你的名字”滤镜》 ​​javascript:void(0)​​它的原理在论文《PoissonImageEditing》中进行了......
  • (GO_GTD_2)基于OpenCV和QT,建立Android图像处理程序
    一、综述   如何采集图片?在windows环境下,我们可以使用dshow,在linux下,也有ffmpeg等基础类库,再不济,opencv自带的videocapture也是提供了基础的支撑。那么在andoird......
  • 反人脸识别的思路和实现
    反人脸识别的思路和实现 一、基本知识和背景    ​人脸识别是非常经典的机器识别运用,目前已经在许多地方得到了使用。相关的算法原理和实现发展的都很发达,Opencv中就......
  • FineUI通过js事件条用后台方法实现弹窗
    一、html标签的onclick事件<buttontype="button"class="btnUpdate"onclick="<%#GetEditUrl(Eval("DetailId"))%>">纠正</button>二、后台弹窗方法publicstrin......
  • 实现app短信验证码功能这样做就很简单!
    现在大多数app短信验证码服务都是由第三方服务商提供的,企业不需要对接运营商就可以让app具备三网发送短信功能,现在app短信验证码使用场景很多,比如说注册、登陆、支付等场景,a......
  • mysql实现limit分页
    1.背景:背景1:查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢?背景2:表里有4条数据,如果只想要显示第2、3条数据怎么办呢?MySQL中使用LIMIT实现分页......
  • 用UL标签+CSS实现的柱状图
    <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""​​http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd​​​"><htmlxmlns="​​​http://ww......
  • 基于DJango和Pybind11,实现网络后端调用OpenCV算法
    本Blog来源于实际项目,所采用框架组合中,OpenCV实现算法主体、pybind11完成OpenCV的Python封装、django提供Web应用服务,三者协同配合,共同实现“网络后端调用OpenCV算法,解决特......
  • qt的其他窗口
    一、qt的其他类族  2.Qlabelui->setupUi(this);QFontfont;//确立一个字体对象font.setFamily("华文行楷");//字体font.setPointSize(20);//字体的......
  • C# 第三方DLL,可以实现PDF转图片,支持32位系统、64位系统
    itextsharp.dll,是一个开源的在C#中用来生成PDF文档的库文件,不少C#爱好者用它制作出了PDF文档生成器。使用时只需在你的C#项目中添加引入此组件即可,使用方法网上有很多,自己查......