我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C/C++ Qt QChart绘图组件的具体使用是怎么样的

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C/C++ Qt QChart绘图组件的具体使用是怎么样的

这篇文章给大家介绍C/C++ Qt QChart绘图组件的具体使用是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

QtCharts 组件是QT中提供图表绘制的模块,该模块可以方便的绘制常规图形,Qtcharts 组件基于GraphicsView模式实现,其核心是QChartViewQChart的二次封装版。

在使用绘图模块时需要在pro文件中包含QT += charts来引入绘图类库。

C/C++ Qt QChart绘图组件的具体使用是怎么样的

然后还需在头文件中定义QT_CHARTS_USE_NAMESPACE宏,这样才可以正常的使用绘图功能。

C/C++ Qt QChart绘图组件的具体使用是怎么样的

一般情况下我们会在mainwindows.h头文件中增加如下代码段。

#include <QMainWindow>#include <QtCharts>QT_CHARTS_USE_NAMESPACE// 解决MSVC编译时,界面汉字乱码的问题#if _MSC_VER >= 1600#pragma execution_character_set("utf-8")#endif

由于QT中不存在单独的绘图画布,因此在绘图前我们需要在窗体中放入一个graphicsView组件。

C/C++ Qt QChart绘图组件的具体使用是怎么样的

并在该组件上右键将其提升为QChartView

C/C++ Qt QChart绘图组件的具体使用是怎么样的

输入需要提升的组件名称,即可将该组件提升为全局绘图组件。

C/C++ Qt QChart绘图组件的具体使用是怎么样的

绘制折线图

折线图的使用非常广泛,如下代码我们首先使用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<QLegendMarker*> (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;    }}

效果如下所示:

C/C++ Qt QChart绘图组件的具体使用是怎么样的

绘制饼状图

饼状图用于统计数据的集的占用百分比,其绘制方式与折线图基本一致,代码如下。

#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;}

效果如下所示:

C/C++ Qt QChart绘图组件的具体使用是怎么样的

绘制柱状图

柱状图可用于一次展示多个用户数据,大体是使用上与折线图大体一致,其代码如下:

#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绘图组件的具体使用是怎么样的

关于C/C++ Qt QChart绘图组件的具体使用是怎么样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C/C++ Qt QChart绘图组件的具体使用是怎么样的

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C/C++ Qt QChart绘图组件的具体使用是怎么样的

这篇文章给大家介绍C/C++ Qt QChart绘图组件的具体使用是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。QtCharts 组件是QT中提供图表绘制的模块,该模块可以方便的绘制常规图形,Qtcharts
2023-06-21

怎么使用C/C++ QT的QChart绘制组件

本篇内容主要讲解“怎么使用C/C++ QT的QChart绘制组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用C/C++ QT的QChart绘制组件”吧!QtCharts 组件是QT中提
2023-06-25

C/C++ Qt QThread线程组件的具体使用是怎样的

这期内容当中小编将会给大家带来有关C/C++ Qt QThread线程组件的具体使用是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。QThread库是QT中提供的跨平台多线程实现方案,使用时需要继承
2023-06-21

C/C++ Qt ToolBar菜单组件的具体使用是怎样的

C/C++ Qt ToolBar菜单组件的具体使用是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。ToolBar工具栏在所有窗体应用程序中都广泛被使用,使
2023-06-21

C++的Qt MdiArea多窗体组件怎么使用

本篇内容主要讲解“C++的Qt MdiArea多窗体组件怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++的Qt MdiArea多窗体组件怎么使用”吧!MDI窗体控件类似于画布,该控件
2023-06-21

C/C++ Qt StatusBar底部状态栏应用是怎么样的

这篇文章将为大家详细讲解有关C/C++ Qt StatusBar底部状态栏应用是怎么样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Qt窗体中默认会附加一个QstatusBar组件,状态栏
2023-06-21

在Visual中C#是怎么使用COM组件的

这篇文章主要讲解了“在Visual中C#是怎么使用COM组件的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在Visual中C#是怎么使用COM组件的”吧!Visual C#是微软推出的新一
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录