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

Qt绘制简单图表

Qt图表类似于model/view,chart就是model。
创建图表的各个部件:
QChart *chart = new QChart();chart->setTitle(tr("简单函数曲线"));
//    chart->setAcceptHoverEvents(true);ui->chartView->setChart(chart);ui->chartView->setRenderHint(QPainter::Antialiasing);QLineSeries *series0 = new QLineSeries();QLineSeries *series1 = new QLineSeries();series0->setName("Sin曲线");series1->setName("Cos曲线");curSeries=series0; //当前序列QPen    pen;pen.setStyle(Qt::DotLine);//Qt::SolidLine, Qt::DashLine, Qt::DotLine, Qt::DashDotLinepen.setWidth(2);pen.setColor(Qt::red);series0->setPen(pen); //折线序列的线条设置pen.setStyle(Qt::SolidLine);//Qt::SolidLine, Qt::DashLine, Qt::DotLine, Qt::DashDotLinepen.setColor(Qt::blue);series1->setPen(pen);//折线序列的线条设置chart->addSeries(series0);chart->addSeries(series1);

创建坐标轴:

QValueAxis *axisX = new QValueAxis;curAxis=axisX; //当前坐标轴axisX->setRange(0, 10); //设置坐标轴范围axisX->setLabelFormat("%.1f"); //标签格式axisX->setTickCount(11); //主分隔个数axisX->setMinorTickCount(4);axisX->setTitleText("time(secs)"); //标题
//    axisX->setGridLineVisible(false);QValueAxis *axisY = new QValueAxis;axisY->setRange(-2, 2);axisY->setTitleText("value");axisY->setTickCount(5);axisY->setLabelFormat("%.2f"); //标签格式
//    axisY->setGridLineVisible(false);axisY->setMinorTickCount(4);

将坐标轴添加进图表:

    chart->addAxis(axisX,Qt::AlignBottom); //坐标轴添加到图表,并指定方向chart->addAxis(axisY,Qt::AlignLeft);series0->attachAxis(axisX); //序列 series0 附加坐标轴series0->attachAxis(axisY);series1->attachAxis(axisX);//序列 series1 附加坐标轴series1->attachAxis(axisY);
从图表上获取数据更新界面显示:
void MainWindow::updateFromChart()
{ //从图表上获取数据更新界面显示QChart  *aChart;aChart=ui->chartView->chart();  //获取chartui->editTitle->setText(aChart->title()); //图表标题QMargins    mg=aChart->margins(); //边距ui->spinMarginLeft->setValue(mg.left());ui->spinMarginRight->setValue(mg.right());ui->spinMarginTop->setValue(mg.top());ui->spinMarginBottom->setValue(mg.bottom());
}

设置图表各种参数:

void MainWindow::on_btnSetTitle_clicked()
{ //设置图标标题文字QString str=ui->editTitle->text();ui->chartView->chart()->setTitle(str);
}void MainWindow::on_btnSetTitleFont_clicked()
{ //设置图标标题文字的字体QFont font=ui->chartView->chart()->titleFont();bool  ok=false;font=QFontDialog::getFont(&ok,font);if (ok)ui->chartView->chart()->setTitleFont(font);
}void MainWindow::on_btnSetMargin_clicked()
{//设置图标的4个边距QMargins    mgs;mgs.setLeft(ui->spinMarginLeft->value());mgs.setRight(ui->spinMarginRight->value());mgs.setTop(ui->spinMarginTop->value());mgs.setBottom(ui->spinMarginBottom->value());ui->chartView->chart()->setMargins(mgs);
}{//图例是否可见ui->chartView->chart()->legend()->setVisible(checked);
}void MainWindow::on_btnSetAxisRange_clicked()
{ //设置坐标轴的坐标范围curAxis->setRange(ui->spinAxisMin->value(),ui->spinAxisMax->value());
}void MainWindow::on_chkGridLineVisible_clicked(bool checked)
{ //轴的网格线是否可见curAxis->setGridLineVisible(checked);
}void MainWindow::on_chkMinorTickVisible_clicked(bool checked)
{ //次级刻度是否可见curAxis->setMinorGridLineVisible(checked);
}void MainWindow::on_chkBoxLegendBackground_clicked(bool checked)
{//图例的背景是否可见ui->chartView->chart()->legend()->setBackgroundVisible(checked);
}void MainWindow::on_radioButton_clicked()
{//图例的位置ui->chartView->chart()->legend()->setAlignment(Qt::AlignTop);
}void MainWindow::on_radioButton_2_clicked()
{//图例的位置ui->chartView->chart()->legend()->setAlignment(Qt::AlignBottom);
}void MainWindow::on_radioButton_3_clicked()
{//图例的位置ui->chartView->chart()->legend()->setAlignment(Qt::AlignLeft);
}void MainWindow::on_radioButton_4_clicked()
{//图例的位置ui->chartView->chart()->legend()->setAlignment(Qt::AlignRight);
}void MainWindow::on_btnLegendFont_clicked()
{ //图例的字体设置QFont font=ui->chartView->chart()->legend()->font();bool  ok=false;font=QFontDialog::getFont(&ok,font);if (ok)ui->chartView->chart()->legend()->setFont(font);
}void MainWindow::on_btnLegendlabelColor_clicked()
{//图例的文字颜色设置QColor  color=ui->chartView->chart()->legend()->labelColor();color=QColorDialog::getColor(color);if (color.isValid())ui->chartView->chart()->legend()->setLabelColor(color);
}void MainWindow::on_btnGridLineColor_clicked()
{ //网格线的颜色设置QColor   color=curAxis->gridLineColor();color=QColorDialog::getColor(color);if (color.isValid())curAxis->setGridLineColor(color);
}void MainWindow::on_pushButton_10_clicked()
{ //网格线的Pen设置QPen    pen;pen=curAxis->gridLinePen();bool    ok=false;pen=QWDialogPen::getPen(pen,ok);if (ok)curAxis->setGridLinePen(pen);
}void MainWindow::on_chkAxisLineVisible_clicked(bool checked)
{//刻度是否可见curAxis->setLineVisible(checked);
}void MainWindow::on_btnAxisLinePen_clicked()
{QPen    pen;pen=curAxis->linePen();bool    ok=false;pen=QWDialogPen::getPen(pen,ok);if (ok)curAxis->setLinePen(pen);
}void MainWindow::on_btnAxisLinePenColor_clicked()
{QColor   color=curAxis->linePenColor();color=QColorDialog::getColor(color);if (color.isValid())curAxis->setLinePenColor(color);
}void MainWindow::on_btnMinorColor_clicked()
{//次级刻度网格线颜色QColor   color=curAxis->minorGridLineColor();color=QColorDialog::getColor(color);if (color.isValid())curAxis->setMinorGridLineColor(color);
}void MainWindow::on_btnMinorPen_clicked()
{//次级刻度线Pen设置QPen    pen;pen=curAxis->minorGridLinePen();bool    ok=false;pen=QWDialogPen::getPen(pen,ok);if (ok)curAxis->setMinorGridLinePen(pen);
}

设置数据序列各种属性:

void MainWindow::on_chkPointVisible_clicked(bool checked)
{//序列的数据点是否可见curSeries->setPointsVisible(checked);
}void MainWindow::on_chkPointLabelVisible_clicked(bool checked)
{ //序列的数据点标签是否可见curSeries->setPointLabelsVisible(checked);
}void MainWindow::on_btnSeriesName_clicked()
{ //设置序列名称curSeries->setName(ui->editSeriesName->text());if (ui->radioSeries0->isChecked())ui->radioSeries0->setText(ui->editSeriesName->text());elseui->radioSeries1->setText(ui->editSeriesName->text());
}void MainWindow::on_btnSeriesColor_clicked()
{ //序列的曲线颜色QColor  color=curSeries->color();color=QColorDialog::getColor(color);if (color.isValid())curSeries->setColor(color);
}void MainWindow::on_radioSeries0_clicked()
{//获取当前数据序列if (ui->radioSeries0->isChecked())curSeries=(QLineSeries *)ui->chartView->chart()->series().at(0);elsecurSeries=(QLineSeries *)ui->chartView->chart()->series().at(1);
//获取序列的属性值,并显示到界面上ui->editSeriesName->setText(curSeries->name());ui->chkSeriesVisible->setChecked(curSeries->isVisible());ui->chkPointVisible->setChecked(curSeries->pointsVisible());ui->sliderSeriesOpacity->setValue(curSeries->opacity()*10);ui->chkPointLabelVisible->setChecked(curSeries->pointLabelsVisible());
}void MainWindow::on_chkSeriesVisible_clicked(bool checked)
{//序列是否可见this->curSeries->setVisible(checked);
}void MainWindow::on_btnSeriesPen_clicked()
{//序列线条的Pen设置bool    ok=false;QPen    pen;pen=curSeries->pen();pen=QWDialogPen::getPen(pen,ok);if (ok)curSeries->setPen(pen);
}void MainWindow::on_sliderSeriesOpacity_valueChanged(int value)
{//序列的透明度curSeries->setOpacity(value/10.0);
}void MainWindow::on_btnSeriesLabColor_clicked()
{//序列数据点标签颜色QColor  color=curSeries->pointLabelsColor();color=QColorDialog::getColor(color);if (color.isValid())curSeries->setPointLabelsColor(color);}void MainWindow::on_btnSeriesLabFont_clicked()
{//序列数据点标签字体QFont   font;font=curSeries->pointLabelsFont();bool    ok=false;font=QFontDialog::getFont(&ok,font);if (ok)curSeries->setPointLabelsFont(font);
}void MainWindow::on_radioSeriesLabFormat0_clicked()
{ //序列数据点标签的显示格式curSeries->setPointLabelsFormat("@yPoint");
}void MainWindow::on_radioSeriesLabFormat1_clicked()
{//序列数据点标签的显示格式curSeries->setPointLabelsFormat("(@xPoint,@yPoint)");
}

设置坐标轴属性:

void MainWindow::on_chkBoxVisible_clicked(bool checked)
{ //坐标轴是否可见curAxis->setVisible(checked);
}void MainWindow::on_btnAxisSetTitle_clicked()
{ //设置坐标轴的标题curAxis->setTitleText(ui->editAxisTitle->text());
}void MainWindow::on_btnAxisSetTitleFont_clicked()
{ //设置坐标轴的标题的字体QFont   font=curAxis->titleFont();bool    ok=false;font=QFontDialog::getFont(&ok,font);if (ok)curAxis->setTitleFont(font);
}void MainWindow::on_chkBoxAxisTitle_clicked(bool checked)
{ //轴标题是否可见curAxis->setTitleVisible(checked);
}void MainWindow::on_pushButton_clicked()
{//设置坐标轴刻度标签的文字格式curAxis->setLabelFormat(ui->editAxisLabelFormat->text());
}void MainWindow::on_btnAxisLabelColor_clicked()
{//设置坐标轴刻度标签的文字颜色QColor   color=curAxis->labelsColor();color=QColorDialog::getColor(color);if (color.isValid())curAxis->setLabelsColor(color);
}void MainWindow::on_btnAxisLabelFont_clicked()
{//设置坐标轴刻度标签的文字字体QFont   font=curAxis->labelsFont();bool    ok=false;font=QFontDialog::getFont(&ok,font);if (ok)curAxis->setLabelsFont(font);
}void MainWindow::on_chkBoxLabelsVisible_clicked(bool checked)
{//轴的刻度标签是否可见curAxis->setLabelsVisible(checked);
}
动画效果:
void MainWindow::on_cBoxAnimation_currentIndexChanged(int index)
{//动画效果ui->chartView->chart()->setAnimationOptions(QChart::AnimationOptions(index));
//    ui->chartView->chart()->setAnimationOptions(QChart::SeriesAnimations);
//    ui->chartView->chart()->setAnimationOptions(QChart::AllAnimations);
}
图标的主题:
void MainWindow::on_cBoxTheme_currentIndexChanged(int index)
{ //图标的主题ui->chartView->chart()->setTheme(QChart::ChartTheme(index));
}

尺寸相关:

void MainWindow::on_actZoomIn_triggered()
{//放大ui->chartView->chart()->zoom(1.2);//zoomIn();
}void MainWindow::on_actZoomOut_triggered()
{//缩小ui->chartView->chart()->zoom(0.8);//zoomOut();
}void MainWindow::on_actZoomReset_triggered()
{//复位ui->chartView->chart()->zoomReset();
}

相关文章:

Qt绘制简单图表

Qt图表类似于model/view,chart就是model。 创建图表的各个部件: QChart *chart new QChart();chart->setTitle(tr("简单函数曲线")); // chart->setAcceptHoverEvents(true);ui->chartView->setChart(chart);ui->chartVi…...

CCLink转Modbus TCP网关_MODBUS网口设置

兴达易控CCLink转Modbus TCP网关是一种用于连接CCLink网络和Modbus TCP网络的设备。它提供了简单易用的MODBUS网口设置,可以帮助用户轻松地配置和管理网络连接 1 、网关做为MODBUS主站 (1)将电脑用网线连接至网关的P3网口上。 (…...

Vux购物车案例

一、综合案例 - 创建项目 本案例主要针对Vuex共享数据的练习以及父子组件数据的共享。 脚手架新建项目 (注意:勾选vuex) 版本说明: vue2 vue-router3 vuex3 vue3 vue-router4 vuex4/pinia vue create vue-cart-demo将原本src内容清空,替换…...

浅析网络协议-HTTP协议

1.HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图…...

启动Docker服务后显示Docker Engine stopped

1、重新启动Docker服务:打开Windows服务管理器(可以在开始菜单中搜索),找到"Docker Desktop Service"或类似命名的服务,右键单击并选择"重启"。稍等片刻,看看是否重新启动成功 2、尝试…...

Centos7 升级到 Centos8 教程以及关于dnf包管理工具的若干问题解决方案

目录 为什么升级一、参考文档二、升级步骤三、安装git编码错误缓存问题安装git依赖冲突问题解决办法 为什么升级 jenkins 2.4版本需要CentOS8 一、参考文档 点我 二、升级步骤 1.安装epel源 yum -y install epel-release2.安装rpmconf和yum-utils yum -y install rpmco…...

计算机网络技术(一)

深入浅出计算机网络 微课视频_哔哩哔哩_bilibili 第一章概述 1.1 信息时代的计算机网络 1. 计算机网络各类应用 2. 计算机网络带来的负面问题 3. 我国互联网发展情况 1.2 因特网概述 1. 网络、互连网(互联网)与因特网的区别与关系 如图所示&#xff0…...

redis监听key失效

前言 ​ 使用redis进行大数据量信息存储时,如存储百万级别设备/通道信息,如果我们想获取设备/通道是否失效,常规的方法是定时获取,但是这样对于应用来说太消耗性能。 ​ redis提供了一种key事件监听的机制,应用可以监…...

echart宽度100px原因(解决el-tabs里的echarts图表宽度不自适应,只有100px问题)

目录 问题描述产生原因处理方法1.使用echart 的API —— resize()2.使用 v-if 总结 问题描述 项目中在el-tabs下面使用了图表,发现图表的宽度始终只有100px 产生原因 首先echart初始化的组件宽度设置了width: 100%,那么本来这个时候,echar…...

【使用教程】在Ubuntu下PMM60系列一体化伺服电机通过PDO跑循环同步位置模式详解

本教程将指导您在Ubuntu操作系统下使用PDO来配置和控制PMM60系列一体化伺服电机以实现循环同步位置模式。我们将介绍必要的步骤和命令,以确保您能够成功地配置和控制PMM系列一体化伺服电机。 一、准备工作 在正式介绍之前还需要一些准备工作:1.装有lin…...

【机器学习】七、降维与度量学习

1. 维数灾难 样本的特征数称为维数(dimensionality),当维数非常大时,也就是现在所说的维数灾难。 维数灾难具体表现在:在高维情形下,数据样本将变得十分稀疏,因为此时要满足训练样本为“密采样…...

Yolov5 + 界面PyQt5 +.exe文件部署运行

介绍 Yolov5是一种基于深度学习的目标检测算法,PyQt5是一个Python编写的GUI框架,用于创建交互式界面。在部署和运行Yolov5模型时,结合PyQt5可以方便地创建一个用户友好的界面,并将代码打包为.exe文件以供其他人使用。 下面是一个…...

工作记录--(用HTTPS,为啥能被查出浏览记录?如何解决?)---每天学习多一点

由于网络通信有很多层,即使加密通信,仍有很多途径暴露你的访问地址,比如: DNS查询:通常DNS查询是不会加密的,所以,能看到你DNS查询的观察者(比如运营商)是可以推断出访问…...

MySQL-基础篇

文章目录 第一章 MYSQL 概述数据库相关概念MySQL 数据库下载安装启动和停止 MySQL客户端连接解决:mysql 不是内部或外部命令,也不是可运行的程序或批处理文件。配置 Path 环境变量解决:net start mysql80 发生系统错误 5。 拒绝访问。MYSQL 的…...

1.Osmdroid概述

愿你出走半生,归来仍是少年! 在最初使用时曾写下了一系列关于OsmDroid的文章,去年开始又基于它做了一系列的项目并且现阶段又使用了新的底图框架,所以在此总结。 1.什么是OsmDroid osmdroid是Android的MapView (v1 API)类的一个(几乎)完全/免…...

Excel表列名称

题意: 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 例如: A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入: columnNumber 1 输出: “A”…...

ORDER BY limit 10比ORDER BY limit 100更慢

问题分析 pg数据库中执行sql时,ORDER BY limit 10比ORDER BY limit 100更慢 执行计划分析 SELECT*,(select cl.ITEM_DESC from tablelzl2 cl where item_namename and cl.ITEM_NOabcdefg) AS "item"FROMtablelzl1 RIWHERE RI.column1AAAAAND RI.colum…...

aws亚马逊云:置以使用 Amazon EC2!!!

完成本部分中的任务,以便为首次启动 Amazon EC2 实例进行设置: 注册一个 AWS 账户 创建管理用户 创建密钥对 创建安全组 完成后,您将准备好学习 Amazon EC2 入门教程。 注册一个 AWS 账户 如果您还没有 AWS 账户,请完成以下…...

torch.cat()、 torch.add()、torch.subtract()、torch.subtract()和torch.div()函数详解和示例

本文通过原理和示例对torch.cat()、 torch.add()、torch.subtract()、torch.subtract()、torch.div()和torch.linalg.solve() 函数进行详解,以帮助大家理解和使用。 目录 torch.cat()函数torch.add()函数torch.subtract()函数逐元素减法示例矩阵减法示例 torch.mul…...

jetsonTX2 nx配置tensorRT加速yolov5推理

环境说明 Ubuntu 18conda环境python3.9cuda10.2,硬件平台是Jetson tx2 nx 前提你已经能运行YOLOV5代码后,再配置tensorRT进行加速。 目前只试了图片检测和C打开USB摄像头进行视频检测,希望是使用python配合D435i深度相机来实现检测&#xff…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...