当前位置: 首页 > wzjs >正文

接网站开发项目网站开发需求确认书

接网站开发项目,网站开发需求确认书,企业单位网站建设内容需要什么,微信html5模板网站QtCharts绘制饼图 说明:qcustomplot模块没有绘制饼图的接口和模块,所以用Qt官方自带的QtCharts进行绘制。绘制出来还挺美观。 1 模块导入 QT chartsQT_BEGIN_NAMESPACE以上这两行代码必须得加 2 总体代码 widget.h #ifndef WIDGET_H #defin…

QtCharts绘制饼图

说明:qcustomplot模块没有绘制饼图的接口和模块,所以用Qt官方自带的QtCharts进行绘制。绘制出来还挺美观。

1 模块导入

QT       += charts
QT_BEGIN_NAMESPACE

以上这两行代码必须得加

2 总体代码

  • widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QtCharts>
#include <QChartView>
#include "qcustomplot.h"
#include <QTimer>
#include <QRandomGenerator>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
QT_CHARTS_USE_NAMESPACE
class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();public:void paintPie(QChartView *chartView);private:Ui::Widget *ui;QTimer *timer;
};
#endif // WIDGET_H
  • widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);paintPie(ui->graphicsView);timer = new QTimer(this);connect(timer, &QTimer::timeout, this,[this](){// 预定义的类别名称数组static const QStringList categoryNames = {"Search Engine","Direct","Email","Union Ads","Video Ads"};QPieSeries *series = static_cast<QPieSeries *>(ui->graphicsView->chart()->series().at(0));QList<QPieSlice*> slices = series->slices();if (slices.size() >= 5){slices[0]->setValue(QRandomGenerator::global()->bounded(10, 100));slices[1]->setValue(QRandomGenerator::global()->bounded(10, 100));slices[2]->setValue(QRandomGenerator::global()->bounded(10, 100));slices[3]->setValue(QRandomGenerator::global()->bounded(10, 100));slices[4]->setValue(QRandomGenerator::global()->bounded(10, 100));}for (int i = 0; i < slices.size(); i++){qreal percent = (slices[i]->value() / series->sum()) * 100.0;
//            修改了这句代码,slice->label()会获取标签值,然后在标签值后不断追加数据
//            label = QString("%1\n%2%").arg(slice->label()).arg(percent, 0, 'f', 1);QString label = QString("%1\n%2%").arg(categoryNames[i]).arg(percent, 0, 'f', 1);slices[i]->setLabel(label);slices[i]->setLabelVisible(true);slices[i]->setLabelArmLengthFactor(0.05);slices[i]->setLabelPosition(QPieSlice::LabelOutside);}});timer->start(1000);
}Widget::~Widget()
{delete ui;
}void Widget::paintPie(QChartView *chartView)
{// 创建饼图对象QPieSeries *series = new QPieSeries();series->setHoleSize(0.35);  // 空心圆大小(0-1)series->setPieSize(0.7);     // 饼图相对视图的大小// 创建Chart画布QChart *chart = new QChart();chartView->setBackgroundBrush(QBrush(QColor(Qt::black)));chart->setBackgroundBrush(QBrush(QColor(Qt::black)));chart->addSeries(series);chart->setAnimationOptions(QChart::AllAnimations); // 设置显示时的动画效果chart->setTitle("系统CPU利用率");chart->setTitleFont(QFont("Arial", 14, QFont::Bold));// 将参数设置到画布chartView->setChart(chart);chartView->setRenderHint(QPainter::Antialiasing);chartView->chart()->setTheme(QChart::ChartTheme(0));chartView->setRubberBand(QChartView::RectangleRubberBand);  // 矩形缩放// 添加数据切片QPieSlice *slice1 = series->append("Search Engine", 1048);QPieSlice *slice2 = series->append("Direct", 735);QPieSlice *slice3 = series->append("Email", 580);QPieSlice *slice4 = series->append("Union Ads", 484);QPieSlice *slice5 = series->append("Video Ads", 300);// 配置每个切片的样式slice1->setColor(QColor(92, 123, 217));slice2->setColor(QColor(159, 224, 128));slice3->setColor(QColor(255, 220, 96));slice4->setColor(QColor(255, 112, 112));slice5->setColor(QColor(126, 211, 244));// 设置标签格式:显示百分比和名称for (auto slice : series->slices()) {qreal percent = (slice->value() / series->sum()) * 100.0;QString label = QString("%1\n%2%").arg(slice->label()).arg(percent, 0, 'f', 1);slice->setLabel(label);slice->setLabelVisible(true);slice->setLabelArmLengthFactor(0.05);  // 标签连接线长度slice->setLabelPosition(QPieSlice::LabelOutside);  // 标签在外部
//       slice->setBorderWidth(2);  // 切片边框宽度}// 配置图例chart->legend()->setVisible(true);chart->legend()->setAlignment(Qt::AlignTrailing);chart->legend()->setFont(QFont("Arial", 9));// 连接悬停信号(突出显示效果)connect(series, &QPieSeries::hovered, [](QPieSlice *slice, bool state){if (state){slice->setExploded(true);      // 突出显示slice->setLabelVisible(true);  // 确保标签可见}else{slice->setExploded(false);slice->setPen(QPen(Qt::NoPen));}});}

3 逐段代码看效果

// 创建饼图对象
QPieSeries *series = new QPieSeries();
series->setHoleSize(0.35);  // 空心圆大小(0-1)
series->setPieSize(0.7);     // 饼图相对视图的大小// 创建Chart画布
QChart *chart = new QChart();
// 将饼图对象加入画布中
chart->addSeries(series);// 设置界面打开时有动画显示
chart->setAnimationOptions(QChart::AllAnimations); // 设置显示时的动画效果
chart->setTitle("饼图示例");
chart->setTitleFont(QFont("Arial", 14, QFont::Bold));
// 将画布设置到视图
chartView->setChart(chart);
chartView->setRenderHint(QPainter::Antialiasing);
chartView->chart()->setTheme(QChart::ChartTheme(0));
chartView->setRubberBand(QChartView::RectangleRubberBand);  // 矩形缩放

上述代码是标准操作流程

在这里插入图片描述

接下来才是操作饼图

// 添加数据切片
QPieSlice *slice1 = series->append("Search Engine", 1048);
QPieSlice *slice2 = series->append("Direct", 735);
QPieSlice *slice3 = series->append("Email", 580);
QPieSlice *slice4 = series->append("Union Ads", 484);
QPieSlice *slice5 = series->append("Video Ads", 300);
// 配置每个切片的样式
slice1->setColor(QColor(92, 123, 217));
slice2->setColor(QColor(159, 224, 128));
slice3->setColor(QColor(255, 220, 96));
slice4->setColor(QColor(255, 112, 112));
slice5->setColor(QColor(126, 211, 244));

在这里插入图片描述

series->setHoleSize(0);  // 空心圆大小(0-1)
series->setPieSize(0.7);     // 饼图相对视图的大小

在这里插入图片描述

series->setHoleSize(1);  // 空心圆大小(0-1)
series->setPieSize(0.7);     // 饼图相对视图的大小

在这里插入图片描述

这样,基础的饼图就绘制出来了,接下来是配置

// 设置标签格式:显示百分比和名称
for (auto slice : series->slices())
{qreal percent = (slice->value() / series->sum()) * 100.0;QString label = QString("%1\n%2%").arg(slice->label()).arg(percent, 0, 'f', 1);slice->setLabel(label);slice->setLabelVisible(true);slice->setLabelArmLengthFactor(0.05);  // 标签连接线长度slice->setLabelPosition(QPieSlice::LabelOutside);  // 标签在外部// slice->setBorderWidth(2);  // 切片边框宽度
}

在这里插入图片描述

slice->setLabelPosition(QPieSlice::LabelInsideNormal);

在这里插入图片描述

// 配置图例
chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignTrailing);
chart->legend()->setFont(QFont("Arial", 9));

在这里插入图片描述

// 连接悬停信号(突出显示效果)
connect(series, &QPieSeries::hovered, [](QPieSlice *slice, bool state)
{if (state){slice->setExploded(true);      // 突出显示slice->setLabelVisible(true);  // 确保标签可见}else{slice->setExploded(false);slice->setPen(QPen(Qt::NoPen));}
});

在这里插入图片描述

4 让饼图动态显示

// 首先,肯定要有一个定时器吧
timer = new QTimer(this);connect(timer, &QTimer::timeout, this,[this]()
{// 预定义的类别名称数组static const QStringList categoryNames = {"Search Engine","Direct","Email","Union Ads","Video Ads"};// 获取饼图的切片QPieSeries *series = static_cast<QPieSeries *>(ui->graphicsView->chart()->series().at(0));QList<QPieSlice*> slices = series->slices();if (slices.size() >= 5){// 这里直接用索引,没有用series->appendslices[0]->setValue(QRandomGenerator::global()->bounded(10, 100));slices[1]->setValue(QRandomGenerator::global()->bounded(10, 100));slices[2]->setValue(QRandomGenerator::global()->bounded(10, 100));slices[3]->setValue(QRandomGenerator::global()->bounded(10, 100));slices[4]->setValue(QRandomGenerator::global()->bounded(10, 100));}for (int i = 0; i < slices.size(); i++){qreal percent = (slices[i]->value() / series->sum()) * 100.0;
//            修改了这句代码,slice->label()会获取标签值,然后在标签值后不断追加数据
//            label = QString("%1\n%2%").arg(slice->label()).arg(percent, 0, 'f', 1);QString label = QString("%1\n%2%").arg(categoryNames[i]).arg(percent, 0, 'f', 1);slices[i]->setLabel(label);slices[i]->setLabelVisible(true);slices[i]->setLabelArmLengthFactor(0.05);slices[i]->setLabelPosition(QPieSlice::LabelOutside);}});
timer->start(1000);
http://www.dtcms.com/wzjs/595055.html

相关文章:

  • 网络推广公司网站网络舆情监测中心具体做什么
  • 台州网站建设公司哪个好地推拉新app推广平台
  • 北京城乡建设部网站首页定制网站开发app费用
  • 如何建立一个网站并运行类似于小红书的千锋教育培训机构地址
  • 网站统计哪个好用素材网站 国外
  • 福州有哪些制作网站公司进行网络推广
  • 做骗子网站长沙网站建设价
  • 学做网站前景东莞市网络优化推广服务机构
  • 国内外高校门户网站建设jsp网站开发实例视频教程
  • 一定得做网站认证wordpress添加贴吧表情
  • 哈尔滨建站系统点击查看情人节网站源码下载
  • 互联网科技公司网站wordpress文章代码插件
  • vue is做的购物网站精准营销的三大要素
  • 网站双线主机优势界面设计优秀的网站有哪些
  • 营销型网站建设定制wordpress下载页源码
  • 网站备案公司倒闭做淘宝券网站
  • 简约大气网站首页wordpress使用vue
  • 事业单位门户网站建设的建议公司做的网站过期了
  • 网站全屏大图代码dz做网站js不起作用
  • 小城镇建设网站成都网络公司服务内容
  • 做网站还需要买空间吗搞软件开发的一般学什么专业
  • 网站开发合同官司网站设计素材网站
  • 长沙市建站注册网站域名
  • [ 1500元做网站_验收满意再付款! 东莞常平天气预报
  • 界面十分好看的网站郑州seo联系搜点网络效果好
  • windows7怎么做网站服务器承德做网站设计的
  • 苏州相城做网站的聊城网站建设企业
  • html网站建设代码网站推广的方法枫子
  • 海淘手表网站wordpress生成海报分享
  • 嘉兴论坛网站建设淘宝网站可信度状况及建设策略