当前位置: 首页 > 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…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...