C/C++ Qt QChart绘图组件的具体使用是怎么样的
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章给大家介绍C/C++ Qt QChart绘图组件的具体使用是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。QtCharts 组件是QT中提供图表绘制的模块,该模块
千家信息网最后更新 2024年09月22日C/C++ Qt QChart绘图组件的具体使用是怎么样的
这篇文章给大家介绍C/C++ Qt QChart绘图组件的具体使用是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
QtCharts 组件是QT中提供图表绘制的模块,该模块可以方便的绘制常规图形,Qtcharts 组件基于GraphicsView
模式实现,其核心是QChartView
和QChart
的二次封装版。
在使用绘图模块时需要在pro文件中包含QT += charts
来引入绘图类库。
然后还需在头文件中定义QT_CHARTS_USE_NAMESPACE
宏,这样才可以正常的使用绘图功能。
一般情况下我们会在mainwindows.h
头文件中增加如下代码段。
#include#include QT_CHARTS_USE_NAMESPACE// 解决MSVC编译时,界面汉字乱码的问题#if _MSC_VER >= 1600#pragma execution_character_set("utf-8")#endif
由于QT中不存在单独的绘图画布,因此在绘图前我们需要在窗体中放入一个graphicsView
组件。
并在该组件上右键将其提升为QChartView
输入需要提升的组件名称,即可将该组件提升为全局绘图组件。
绘制折线图
折线图的使用非常广泛,如下代码我们首先使用InitChart()
将画布初始化,接着调用SetData()
实现在画布中填充数据,完整代码如下。
#include "mainwindow.h"#include "ui_mainwindow.h"// 初始化Chart图表void MainWindow::InitChart(){ // 创建图表的各个部件 QChart *chart = new QChart(); chart->setTitle("系统性能统计图"); // 将Chart添加到ChartView ui->graphicsView->setChart(chart); // this->setCentralWidget( ui->graphicsView); ui->graphicsView->setRenderHint(QPainter::Antialiasing); // 设置图表主题色 ui->graphicsView->chart()->setTheme(QChart::ChartTheme(0)); // 创建曲线序列 QLineSeries *series0 = new QLineSeries(); QLineSeries *series1 = new QLineSeries(); series0->setName("一分钟负载"); series1->setName("五分钟负载"); // 序列添加到图表 chart->addSeries(series0); chart->addSeries(series1); // 其他附加参数 series0->setPointsVisible(false); // 设置数据点可见 series1->setPointLabelsVisible(false); // 设置数据点数值可见 // 创建坐标轴 QValueAxis *axisX = new QValueAxis; // X轴 axisX->setRange(1, 100); // 设置坐标轴范围 axisX->setTitleText("X轴标题"); // 标题 axisX->setLabelFormat("%d %"); // 设置x轴格式 axisX->setTickCount(3); // 设置刻度 axisX->setMinorTickCount(3); QValueAxis *axisY = new QValueAxis; // Y轴 axisY->setRange(0, 100); // Y轴范围(-1 - 20) axisY->setTitleText("Y轴标题"); // 标题 // 设置X于Y轴数据集 chart->setAxisX(axisX, series0); // 为序列设置坐标轴 chart->setAxisY(axisY, series0); chart->setAxisX(axisX, series1); // 为序列设置坐标轴 chart->setAxisY(axisY, series1); // 图例被点击后触发 foreach (QLegendMarker* marker, chart->legend()->markers()) { QObject::disconnect(marker, SIGNAL(clicked()), this, SLOT(on_LegendMarkerClicked())); QObject::connect(marker, SIGNAL(clicked()), this, SLOT(on_LegendMarkerClicked())); }}// 为序列生成数据void MainWindow::SetData(){ // 获取指针 QLineSeries *series0=(QLineSeries *)ui->graphicsView->chart()->series().at(0); QLineSeries *series1=(QLineSeries *)ui->graphicsView->chart()->series().at(1); // 清空图例 series0->clear(); series1->clear(); // 赋予数据 qreal t=0,intv=1; for(int i=1;i<100;i++) { series0->append(t,i); // 设置轴粒度以及数据 series1->append(t,i+10); // 此处用随机数替代 t+=intv; // X轴粒度 }}// 将添加的widget控件件提升为QChartView类MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ ui->setupUi(this); InitChart(); SetData();}MainWindow::~MainWindow(){ delete ui;}// 图例点击后显示与隐藏线条void MainWindow::on_LegendMarkerClicked(){ QLegendMarker* marker = qobject_cast(sender()); switch (marker->type()) { case QLegendMarker::LegendMarkerTypeXY: { marker->series()->setVisible(!marker->series()->isVisible()); marker->setVisible(true); qreal alpha = 1.0; if (!marker->series()->isVisible()) alpha = 0.5; QColor color; QBrush brush = marker->labelBrush(); color = brush.color(); color.setAlphaF(alpha); brush.setColor(color); marker->setLabelBrush(brush); brush = marker->brush(); color = brush.color(); color.setAlphaF(alpha); brush.setColor(color); marker->setBrush(brush); QPen pen = marker->pen(); color = pen.color(); color.setAlphaF(alpha); pen.setColor(color); marker->setPen(pen); break; } default: break; }}
效果如下所示:
绘制饼状图
饼状图用于统计数据的集的占用百分比,其绘制方式与折线图基本一致,代码如下。
#include "mainwindow.h"#include "ui_mainwindow.h"// 饼状图Avoid MainWindow::printA(){ // 构造数据 [已用CPU 60%] [剩余CPU 40%] QPieSlice *slice_1 = new QPieSlice(QStringLiteral("已使用"), 0.6, this); slice_1->setLabelVisible(true); QPieSlice *slice_2 = new QPieSlice(QStringLiteral("可用"), 0.4, this); slice_2->setLabelVisible(true); // 将两个饼状分区加入series QPieSeries *series = new QPieSeries(this); series->append(slice_1); series->append(slice_2); // 创建Chart画布 QChart *chart = new QChart(); chart->addSeries(series); chart->setAnimationOptions(QChart::AllAnimations); // 设置显示时的动画效果 chart->setTitle("系统CPU利用率"); // 将参数设置到画布 ui->graphicsView->setChart(chart); ui->graphicsView->setRenderHint(QPainter::Antialiasing); ui->graphicsView->chart()->setTheme(QChart::ChartTheme(0));}// 饼状图Bvoid MainWindow::printB(){ // 构造数据 [C盘 20%] [D盘 30%] [E盘 50%] QPieSlice *slice_c = new QPieSlice(QStringLiteral("C盘"), 0.2, this); slice_c->setLabelVisible(true); QPieSlice *slice_d = new QPieSlice(QStringLiteral("D盘"), 0.3, this); slice_d->setLabelVisible(true); QPieSlice *slice_e = new QPieSlice(QStringLiteral("E盘"),0.5,this); slice_e->setLabelVisible(true); // 将两个饼状分区加入series QPieSeries *series = new QPieSeries(this); series->append(slice_c); series->append(slice_d); series->append(slice_e); // 创建Chart画布 QChart *chart = new QChart(); chart->addSeries(series); chart->setAnimationOptions(QChart::AllAnimations); // 设置显示时的动画效果 chart->setTitle("系统磁盘信息"); // 将参数设置到画布 ui->graphicsView_2->setChart(chart); ui->graphicsView_2->setRenderHint(QPainter::Antialiasing); ui->graphicsView_2->chart()->setTheme(QChart::ChartTheme(3)); // 设置不同的主题}// 将添加的widget控件件提升为QChartView类MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ ui->setupUi(this); printA(); printB();}MainWindow::~MainWindow(){ delete ui;}
效果如下所示:
绘制柱状图
柱状图可用于一次展示多个用户数据,大体是使用上与折线图大体一致,其代码如下:
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ ui->setupUi(this); // 创建人名 QBarSet *set0 = new QBarSet("张三"); QBarSet *set1 = new QBarSet("李四"); QBarSet *set2 = new QBarSet("王五"); QBarSet *set3 = new QBarSet("苏三"); QBarSet *set4 = new QBarSet("刘麻子"); // 分别为不同人添加bu不同数据集 *set0 << 1 << 2 << 8 << 4 << 6 << 6; *set1 << 5 << 2 << 5 << 4 << 5 << 3; *set2 << 5 << 5 << 8 << 15 << 9 << 5; *set3 << 8 << 6 << 7 << 5 << 4 << 5; *set4 << 4 << 7 << 5 << 3 << 3 << 2; // 将数据集关联到series中 QBarSeries *series = new QBarSeries(); series->append(set0); series->append(set1); series->append(set2); series->append(set3); series->append(set4); // 增加顶部提示 QChart *chart = new QChart(); chart->addSeries(series); chart->setTitle("当前人数统计"); chart->setAnimationOptions(QChart::SeriesAnimations); // 创建X轴底部提示 QStringList categories; categories << "周一" << "周二" << "周三" << "周四" << "周五" << "周六"; QBarCategoryAxis *axis = new QBarCategoryAxis(); axis->append(categories); chart->createDefaultAxes(); chart->setAxisX(axis, series); chart->legend()->setVisible(true); chart->legend()->setAlignment(Qt::AlignBottom); // 将参数设置到画布 ui->graphicsView->setChart(chart); ui->graphicsView->setRenderHint(QPainter::Antialiasing); ui->graphicsView->chart()->setTheme(QChart::ChartTheme(0));}MainWindow::~MainWindow(){ delete ui;}
效果如下所示:
关于C/C++ Qt QChart绘图组件的具体使用是怎么样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
数据
组件
绘图
画布
代码
图表
序列
效果
参数
坐标
坐标轴
标题
线图
不同
图例
文件
模块
系统
统计
一致
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器托管的方式特点
网站没有数据库备份
吉德互联网科技有限公司
c 打开数据库链接
51idc 服务器租用
简述网络安全包含哪些因素
宝山区上门软件开发定制平均价格
MySQL数据库的运行要求
oa软件开发案例
新乡政务软件开发
mpp 服务器
海外服务器评测
数数据库常见面试题
国内专业的服务器主动管理
云鸟科技是互联网行业吗
宜兴专业软件开发节能规范
金山区创新数据库服务商服务费
怎样给数据库填记录
数据库怎么插入表的数据
2007年服务器架构
网络安全和网络维护是一个工作吗
奇安信网络安全公司
多服务器手游
微信如何打开数据库
一台服务器虚拟化
mysql开发数据库关联
软件开发员行业分类
商业银行网络安全管理实战
代理服务器怎么配置才安全
金山区创新数据库服务商服务费