QT基础 - 常见图表绘制

news2025/1/15 16:49:41

目录

零. 前言

一. 添加模块

折线图

三. 树状图

四. 饼图

五. 堆叠柱状图

六. 百分比柱状图

七. 散点图和光滑曲线图

散点图

光滑曲线图


零. 前言

Qt Charts 是 Qt 框架的一个模块,用于创建各种类型的图表和数据可视化。它为开发者提供了一套功能强大的工具,使他们能够轻松地在他们的 Qt 应用程序中集成各种图表,如折线图、柱状图、饼图、散点图等,从而有效地展示和分析数据。以下是 Qt Charts 的一些主要特点和功能:

  • 丰富的图表类型:Qt Charts 支持多种常见的图表类型,包括折线图、柱状图、饼图、区域图、散点图、极坐标图等,满足了不同数据可视化需求。
  • 交互性和动画效果:Qt Charts 允许开发者为图表添加交互性和动画效果,如数据点高亮显示、工具提示、图例等,从而使用户能够更直观地理解和分析数据。
  • 自定义样式和外观:开发者可以通过调整样式、颜色、字体等来自定义图表的外观,使其与应用程序的整体设计风格相匹配。
  • 支持多轴和多系列:Qt Charts 允许在同一图表中显示多个数据系列,每个系列可以有自己的轴,从而可以同时比较不同数据之间的关系。
  • 数据模型和绑定:Qt Charts 支持通过 Qt 的模型视图架构将数据绑定到图表,这意味着你可以使用标准的 Qt 模型和数据来更新和管理图表的内容。
  • 导出和打印:你可以将 Qt Charts 创建的图表导出为图像文件或打印出来,以便在文档、报告或演示中使用。
  • 跨平台支持:正如 Qt 框架的其他部分一样,Qt Charts 也是跨平台的,可以在不同操作系统上(如 Windows、Linux、macOS)使用。

要使用 Qt Charts,需要在 Qt 项目中添加 QtCharts 模块,并在代码中引入相应的类和方法来创建和配置图表。

一. 添加模块

要在 Qt 中添加 Charts 模块,需要按照以下步骤进行操作:

  1. 打开 Qt Creator,创建一个新的 Qt Widgets 应用程序项目。
  2. 在项目的.pro文件中,添加QT += charts语句,以确保项目链接到 Charts 模块。
  3. 在代码中,包含必要的头文件,例如<QtCharts>
  4. 使用 Charts 模块提供的类和函数来创建和显示图表。
  5. 引入头文件 #include <QtCharts>

折线图

以下是一个简单的示例代码,展示了如何在 Qt 中创建一个折线图:

#include <QtWidgets>
#include <QtCharts>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 创建折线图
    QChartView *chartView = new QChartView;
    QChart *chart = new QChart;
    chartView->setChart(chart);

    // 添加数据
    QLineSeries *series = new QLineSeries;
    series->append(0, 0);
    series->append(1, 1);
    series->append(2, 2);
    series->append(3, 3);
    series->append(4, 4);
    chart->addSeries(series);

    // 设置图表标题和坐标轴标签
    chart->setTitle("Simple Line Chart");
    chart->createDefaultAxes();

    // 显示图表
    chartView->show();

    return a.exec();
}

在上述代码中,首先创建了一个QChartView对象和一个QChart对象,并将QChart对象设置为QChartView的图表。然后,创建了一个QLineSeries对象,并向其中添加了一些数据点。最后,将QLineSeries对象添加到QChart中,并设置了图表的标题和坐标轴标签。

效果图

三. 树状图

Qt 中的树状图可以使用QTreeWidgetQTreeView组件来实现。QTreeWidget提供了更简单的 API,适用于轻量级、快速开发的需求;而QTreeView则更为灵活和可定制,适用于复杂的数据模型和视图交互。

以下是一个使用QTreeView创建树状图的示例代码:

#include <QApplication>
#include <QTreeView>
#include <QStandardItemModel>
#include <QStandardItem>
#include<QVBoxLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 创建模型
    QStandardItemModel* model = new QStandardItemModel();
    model->setColumnCount(1);

    // 添加根节点
    QStandardItem* rootNode = new QStandardItem("Root");
    model->appendRow(rootNode);

    // 添加子节点
    QStandardItem* childNode1 = new QStandardItem("Child 1");
    QStandardItem* childNode2 = new QStandardItem("Child 2");
    rootNode->appendRow(childNode1);
    rootNode->appendRow(childNode2);

    // 创建视图
    QTreeView* treeView = new QTreeView();
    treeView->setModel(model);
    treeView->expandAll();

    // 主窗口及布局
    QWidget window;
    QVBoxLayout* layout = new QVBoxLayout(&window);
    layout->addWidget(treeView);
    window.show();

    return a.exec();
}

上述代码中,首先创建了一个QStandardItemModel对象作为树状图的数据模型,并设置其列数为1。然后,创建了一个根节点和两个子节点,并将子节点添加到根节点下。接下来,创建了一个QTreeView对象,并将其与数据模型关联起来。通过调用expandAll方法展开所有节点。最后,将QTreeView添加到主窗口的布局中,并显示主窗口。

效果图

四. 饼图

Qt 中的饼图可以使用QPieSeries类来实现。QPieSeries是 Qt Charts 模块中的一个类,用于表示饼图数据。以下是一个简单的例子

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QChart>
#include <QtCharts/QPieSeries>
#include <QtCharts/QPieSlice>


    int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 创建图表
    QChart *chart = new QChart();

    // 创建饼图系列
    QPieSeries *series = new QPieSeries();

    // 添加数据切片
    series->append("苹果", 25);
    series->append("香蕉", 30);
    series->append("橙子", 15);
    series->append("草莓", 30);

    // 设置切片颜色
    series->slices().at(0)->setColor(Qt::red);
    series->slices().at(1)->setColor(Qt::yellow);
    series->slices().at(2)->setColor(Qt::green);
    series->slices().at(3)->setColor(Qt::blue);

    // 将系列添加到图表
    chart->addSeries(series);

    // 创建图表视图并设置图表
    QChartView *chartView = new QChartView(chart);

    // 创建主窗口
    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(500, 400);
    window.show();

    return a.exec();
}

效果图

五. 堆叠柱状图

堆叠柱状图是一种将多个柱状图堆叠在一起展示的图表类型。以下是一个使用 Qt 绘制堆叠柱状图的示例代码:

#include <QApplication>
#include <QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QChart>
#include <QtCharts/QStackedBarSeries>
#include <QtCharts/QBarSet>
#include <QtCharts/QBarCategoryAxis>
#include <QtCharts/QValueAxis>


    int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QChart *chart = new QChart();

    // 创建数据集合
    QBarSet *set1 = new QBarSet("Group 1");
    QBarSet *set2 = new QBarSet("Group 2");
    QBarSet *set3 = new QBarSet("Group 3");

    // 为数据集合添加数据
    *set1 << 10 << 20 << 30 << 40 << 50;
    *set2 << 5 << 15 << 25 << 35 << 45;
    *set3 << 8 << 18 << 28 << 38 << 48;

    QStackedBarSeries *series = new QStackedBarSeries();
    series->append(set1);
    series->append(set2);
    series->append(set3);

    // X 轴
    QBarCategoryAxis *axisX = new QBarCategoryAxis();
    QStringList categories = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"};
    axisX->setCategories(categories);

    // Y 轴
    QValueAxis *axisY = new QValueAxis();
    axisY->setRange(0, 100);

    chart->addSeries(series);
    chart->addAxis(axisX, Qt::AlignBottom);
    chart->addAxis(axisY, Qt::AlignLeft);
    series->attachAxis(axisX);
    series->attachAxis(axisY);

    QChartView *chartView = new QChartView(chart);

    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(800, 600);
    window.show();

    return app.exec();
}

效果图

六. 百分比柱状图

示例代码

#include <QApplication>
#include <QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QChart>
#include <QtCharts/QPercentBarSeries>
#include <QtCharts/QBarSet>
#include <QtCharts/QBarCategoryAxis>
#include <QtCharts/QValueAxis>


    int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QChart *chart = new QChart();

    // 创建数据集合
    QBarSet *set1 = new QBarSet("Group 1");
    QBarSet *set2 = new QBarSet("Group 2");
    QBarSet *set3 = new QBarSet("Group 3");

    // 为数据集合添加数据
    *set1 << 10 << 20 << 30 << 40 << 50;
    *set2 << 5 << 15 << 25 << 35 << 45;
    *set3 << 8 << 18 << 28 << 38 << 48;

    QPercentBarSeries *series = new QPercentBarSeries();
    series->append(set1);
    series->append(set2);
    series->append(set3);

    // X 轴
    QBarCategoryAxis *axisX = new QBarCategoryAxis();
    QStringList categories = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"};
    axisX->setCategories(categories);

    // Y 轴
    QValueAxis *axisY = new QValueAxis();
    axisY->setRange(0, 100);

    chart->addSeries(series);
    chart->addAxis(axisX, Qt::AlignBottom);
    chart->addAxis(axisY, Qt::AlignLeft);
    series->attachAxis(axisX);
    series->attachAxis(axisY);

    QChartView *chartView = new QChartView(chart);

    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(800, 600);
    window.show();

    return app.exec();
}

效果图

七. 散点图和光滑曲线图

散点图

在 Qt 中,散点图用于展示两个变量之间的关系。它通过在平面上绘制一系列的数据点来呈现数据的分布和趋势。

散点图适用于分析数据的相关性、聚类情况以及异常值的检测等。

示例代码

#include <QApplication>
#include <QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QChart>
#include <QtCharts/QScatterSeries>


    int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 创建图表
    QChart *chart = new QChart();

    // 创建散点图系列
    QScatterSeries *series = new QScatterSeries();

    // 添加数据点
    series->append(0, 6);
    series->append(1, 7);
    series->append(2, 4);
    series->append(3, 9);
    series->append(4, 5);

    // 将系列添加到图表
    chart->addSeries(series);

    // 创建图表视图并设置图表
    QChartView *chartView = new QChartView(chart);

    // 创建主窗口
    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(500, 400);
    window.show();

    return a.exec();
}

效果图

光滑曲线图

在 Qt 中,光滑曲线图常用于展示连续数据的变化趋势,相较于折线图,它的线条更加平滑,能够更好地呈现数据的整体趋势,减少折线图中可能出现的尖锐转角。

光滑曲线图在数据分析和可视化中具有重要作用,例如:

  • 展示时间序列数据的变化,如股票价格、气温变化等。
  • 分析实验数据的趋势,帮助发现潜在的规律。

示例代码

#include <QApplication>
#include <QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QChart>
#include <QtCharts/QSplineSeries>


    int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 创建图表
    QChart *chart = new QChart();

    // 创建光滑曲线系列
    QSplineSeries *series = new QSplineSeries();

    // 添加数据点
    series->append(0, 6);
    series->append(1, 7);
    series->append(2, 4);
    series->append(3, 9);
    series->append(4, 5);

    // 将系列添加到图表
    chart->addSeries(series);

    // 创建图表视图并设置图表
    QChartView *chartView = new QChartView(chart);

    // 创建主窗口
    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(500, 400);
    window.show();

    return a.exec();
}

效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1845090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试干货】Java的基础类型和字节大小

【面试干货】Java的基础类型和字节大小 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java编程语言中&#xff0c;有八种基本数据类型&#xff0c;它们分别是&#xff1a;布尔型&#xff08;boolean&#xff09;、字节型&#xff08;byt…

什么是 SSH(安全外壳协议)以及如何工作

安全外壳协议&#xff08;Secure Shell&#xff0c;简称SSH&#xff09;&#xff0c;旨在取代未加密的协议&#xff08;如 Telnet 和 RSH&#xff09;和未受保护的文件传输协议&#xff08;如 FTP 和 RCP&#xff09;&#xff0c;在两个设备之间提供安全的加密连接。 安全外壳…

MyBatis 动态 SQL怎么使用?

引言&#xff1a;在现代的软件开发中&#xff0c;数据库操作是任何应用程序的核心部分之一。而在 Java 开发领域&#xff0c;MyBatis 作为一款优秀的持久层框架&#xff0c;以其简洁的配置和强大的灵活性被广泛应用。动态 SQL 允许开发人员根据不同的条件和场景动态地生成和执行…

Kubernetes部署Kanboard看板管理平台

【云原生】Kubernetes部署Kanboard项目管理平台 文章目录 【云原生】Kubernetes部署Kanboard项目管理平台介绍资源列表基础环境一、检查k8s环境1.1、检查工作节点状态1.2、检查系统pod状态 二、编辑kanboard.yaml文件2.1、创建项目目录2.2、编辑kanboard.yaml文件 三、部署Kanb…

字节跳动的丝绸之路,豆包或将成为赛博“杨枝甘露”

大数据产业创新服务媒体 ——聚焦数据 改变商业 关于字节跳动有一个所有人都知道的秘密&#xff0c;那就是他们正在想方设法地海外扩张&#xff0c;以全球市场来驱动企业的新增长。美国曾经是字节跳动的第二战场&#xff0c;但是随着华盛顿相关法案的出台&#xff0c;在各种不…

推荐5个AI辅助生成论文、降低查重率的网站【2024最新】

一、引言 对于忙碌的学生来说&#xff0c;毕业论文通常是一项艰巨的任务。幸运的是&#xff0c;随着人工智能技术的发展&#xff0c;现在有一些工具可以帮助学生轻松完成论文。本文将介绍五个免费的AI工具&#xff0c;它们能够一键帮助你生成毕业论文&#xff0c;让你的学术生…

2024广东省职业技能大赛云计算赛项实战——Redis主从架构

Redis主从架构 前言 Redis是一个开源的内存数据结构存储系统&#xff0c;一般用于作为数据库、缓存和消息代理使用&#xff0c;而主从架构是许多分布式系统中常见的设计模式&#xff0c;用来提高系统的性能、可靠性和扩展性。 虚拟机使用的是自行创建的CentOS7&#xff0c;如…

记录SpringBoot启动报错解决

记录SpringBoot启动报错解决 报错现场 Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class Action: Consider the following:If you want an embedde…

反转链表(java精简版)

反转一个单向链表。 public class ReversingLinkedList {static class Node {int val;Node next;public Node(int val) {this.val val;}public boolean hasNext() {return next ! null;}}public static void main(String[] args) {//构造Node head null;Node shift null;for…

MobileNet系列论文阅读笔记(MobileNetV1、MobileNetV2和MobileNetV3)

目录 引言MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications摘要Prior Work -- 先前工作MobileNet Architecture— MobileNet结构Depthwise Separable Convolution—深度可分离卷积Network Structure -- 网络结构 总结 MobileNetV2: Invert…

视频共享融合赋能平台LntonCVS视频监控业务平台建设安全煤矿矿井应用方案

随着我国经济的飞速增长&#xff0c;煤炭作为主要的能源之一&#xff0c;在我国的能源结构中扮演着至关重要的角色。然而&#xff0c;煤矿事故的频繁发生&#xff0c;不仅造成了巨大的人员伤亡和财产损失&#xff0c;也对社会产生了深远的负面影响。因此&#xff0c;实现煤矿的…

transformers Model

☆ 问题描述 在 transformers 框架中&#xff0c;Model 模块是核心组件之一&#xff0c;提供了多种预训练模型及其相关功能&#xff0c;广泛应用于自然语言处理&#xff08;NLP&#xff09;任务。 ★ 解决方案 # 导入相关文件 from transformers import AutoConfig, AutoM…

【odoo】常用的字符转义:“>“,“<“,““,“/“等

概要 字符转义是指在编写代码或处理文本数据时&#xff0c;将特殊字符转换为另一种形式&#xff0c;以便在特定的上下文中正确解析和处理这些字符。 内容 特殊字符描述XML转义表示法&和符号&amp;<小于符号<>大于符号>"双引号&quot;单引号&ap…

Day1:基础语法

今日目标&#xff1a;理解什么是变量、掌握常用的数据类型、学会数据类型转换 一、JavaScript 介绍 1. JavaScript 基础知识 主要讲解 &#xff1a;JavaScript 是什么、书写位置、注释、结束符、输入和输出语法、字面量。 1.1 JavaScript 是什么 是一种运行在客户端(浏览器…

B端业务需求分析的3大注意事项

通过深入分析业务需求&#xff0c;可以准确理解B端用户的具体需求&#xff0c;帮助项目团队设计出真正解决企业问题、提高工作效率的产品或服务。这减少了后期变更&#xff0c;节约了时间和资源。如果没有深入分析业务需求&#xff0c;产品或服务功能可能与实际业务需求脱节&am…

PHP转Go系列 | 数组切片的使用姿势

大家好&#xff0c;我是码农先森。 简介 在 PHP 语言中数组的使用很简单&#xff0c;易用程度简直变态&#xff0c;无论多么复杂的数据格式都可以用数组来表达&#xff0c;可以随心所欲的使用。 <?php $array [1, name, [sex > 男]]; print_r($array);$array []; $…

【LLM之NL2SQL】DAIL-SQL论文阅读笔记

研究背景 该研究旨在提供一个全面、系统的评估框架&#xff0c;用于评估基于大型语言模型&#xff08;LLM&#xff09;的Text-to-SQL技术。特别强调了不同的提示工程策略的有效性和效率&#xff0c;以及开源LLM的可行性。研究的重点是评估在零样本和少样本场景下的不同问题表示…

1.3自然语言的分布式表示-word2vec

文章目录 0基于计数的方法的问题1什么是基于推理的方法2神经网络中单词的表示2.1 MatMul 层的实现 3简单word2vec的实现3.1 CBOW模型的结构3.1.1神经元视角3.1.2层的视角3.1.3多层共享权重时存在的问题 3.2 CBOW模型的学习3.3单词的分布式表示 代码都位于&#xff1a;nlp&#…

《梦醒蝶飞:释放Excel函数与公式的力量》4.1if函数

第4章&#xff1a;逻辑与条件函数 第一节4.1 if函数 在Excel中&#xff0c;逻辑函数用于处理基于特定条件的真假判断&#xff0c;它们是构建复杂公式和进行高级数据分析的基础。本章将深入探讨逻辑函数的使用方法&#xff0c;特别是IF函数&#xff0c;这是Excel中最为常用的条…

Node.js 是一个开源的 跨平台的JavaScript运行环境

https://www.npmjs.com/ 中央仓库 Visual Studio Code - Code Editing. Redefined https://openjsf.org/ OpenJS 促进了关键 JavaScript 技术在全球范围内的广泛采用和持续发展。 Apache服务器 Nginx服务器 Tomcat服务器 Node.js服务器 Gunicorn服务器 uW…