Qt图形图像开发之曲线图表模块QChart库坐标轴和数据不对应、密集的散点图无法显示问题解决方法

 更新时间:2020年03月11日 16:09:05   作者:qq_610642  
这篇文章主要介绍了Qt图形图像开发之曲线图表模块QChart库坐标轴和数据不对应、密集的散点图无法显示问题解决方法,需要的朋友可以参考下

QChart坐标轴和数据不对应问题描述:

lineseries->append(4, 10);
lineseries->append(5, 8);
Chart->addSeries(lineseries); // 将 series 添加至图表中
axisX->setRange(0, 15);//设置X的显示范围
axisY->setRange(-20, 20);
lineChart->setAxisX(axisX);//把轴添加到图表中
lineChart->setAxisY(axisY);

结果发现,数据系列中的点(4,10)在坐标系中的坐标不是(4,10)

原因在于,轴和数据系列没有连接。

一个图表QChart中可以有多个数据系列(也即一个图表中可以有多条曲线,甚至可以同时包含散点图和折线),每个数据系列都必须与两个坐标轴相连接。

连接方法有两种:

(1)在给图表设置轴时,顺便与数据系列相连

lineChart->setAxisX(axisX, lineseries);//把轴添加到图表中,同时把数据系列与这个轴相连

lineChart->setAxisY(axisY, lineseries);//

(2)单独的语句把数据系列和轴相连(只有series已经被添加进chart之后,再执行attachAxis才能有效)

lineseries->attachAxis(axisX);

lineseries->attachAxis(axisY);

密集的散点图无法显示问题描述

如下图所示:一个由1000个point组成的QScatterSeries,密集的部分显示不出来,只有放大之后才能看清。

更恶劣的情况是,把chartView缩小之后,最后只能看见最后一个点。

原因分析:QT绘制图形时,会用到QBrush和QPen,QPen用于绘制轮廓,QBrush用于绘制填充,默认情况下,QScatterSeries绘制散点时,用的QPen的颜色是白色的,也即绘出的散点,带白色边框,图像缩小之后,白色边框把填充的红色给遮挡住了。把散点放大之后,就能明白我说的意思了

如下图:

解决方法:给QScatterSeries设置QPen的粗细为0,或者透明,或者不使用QPen,均可解决这一问题,示例代码如下:

QScatterSeries scatterSeries;
scatterSeries.setMarkerSize(25);//设置点的大小(单位:像素数)
scatterSeries.setMarkerShape(QScatterSeries::MarkerShapeCircle);//点的形状:方形/圆形/自己用pen画
 
//方法1,设置画笔的粗细为0
QPen pen;
pen.setWidth(0);
cntScatterSeries.setPen(pen);
 
//方法2:把画笔的颜色设置为透明
ScatterSeries.setPen(QPen(Qt::transparent));
 
//方法3:不使用画笔(只用QBrush填充点,)
ScatterSeries.setPen(QPen(Qt::NoPen));//画出的点不带轮廓

效果如下:已经没有轮廓了,这样即使把图像缩小也不会被白色轮廓给遮挡住了

本文主要介绍了Qt曲线图表模块QChart库坐标轴和数据不对应、密集的散点图无法显示问题解决方法,更多关于Qt曲线图表模块QChart库的知识请查看下面的相关链接

相关文章

  • C++的数据共享与保护你了解吗

    C++的数据共享与保护你了解吗

    这篇文章主要为大家详细介绍了C语言零基础入门的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C语言实现贪吃蛇小游戏开发

    C语言实现贪吃蛇小游戏开发

    这篇文章主要为大家详细介绍了C语言实现贪吃蛇小游戏开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C++实现四则运算器(无括号)

    C++实现四则运算器(无括号)

    这篇文章主要为大家详细介绍了C++实现四则运算器,无括号的计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C语言三个数排列大小的实现方法

    C语言三个数排列大小的实现方法

    下面小编就为大家带来一篇C语言三个数排列大小的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • C语言深入讲解之从函数栈帧角度理解return关键字

    C语言深入讲解之从函数栈帧角度理解return关键字

    在C语言中,一般情况下函数的返回值是通过函数中的return语句来实现的,每调用一次return语句只能从函数中返回一个值,这篇文章主要给大家介绍了关于C语言从函数栈帧角度理解return关键字的相关资料,需要的朋友可以参考下
    2021-09-09
  • C++11中value category(值类别)及move semantics(移动语义)的介绍

    C++11中value category(值类别)及move semantics(移动语义)的介绍

    这篇文章主要给大家介绍了C++11中value category(值类别)及move semantics(移动语义)的介绍,文中介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • 数据结构之堆详解

    数据结构之堆详解

    这篇文章主要介绍了数据结构之堆详解,本文讲解了堆的基本常识堆的基本操作、堆的应用等内容,需要的朋友可以参考下
    2014-08-08
  • C++中二叉堆排序详解

    C++中二叉堆排序详解

    这篇文章主要介绍了C++中二叉堆排序详解,主要介绍了二叉堆排序(递归和非递归实现上沉、下沉算法),需要的朋友可以参考下
    2023-01-01
  • c/c++语言位域注意事项分析

    c/c++语言位域注意事项分析

    所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,答应在程序中按域名进行操作
    2013-09-09
  • C++详解如何实现动态数组

    C++详解如何实现动态数组

    这篇文章主要为大家详细介绍了C++实现动态数组的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06

最新评论