帮助中心 广告联系

灵宝信息网-灵宝天气预报-灵宝教育网-灵宝租房-灵宝新闻网-灵宝生活网

热门关键词:

QtCharts之QXYSeries

来源:原创/投稿/转载 发布时间:2019-09-19

  等。QXYSeries封装了大量对数据源进行增删改操作的函数和信号,同时内部实现了控制数据点在坐标系上的显示形态(点标签的格式、颜色、是否显示等)的功能。

  Qt图表中的点标签指的是数据点在图表上对应位置的附加信息显示(比如点的坐标或者其他信息):

  QXYSeries类中提供了pointLabels*开头的五个属性及对应的方法和信号来操作点标签的显示风格。

  可以看到,当设置pointLabelsClipping属性为true(默认值)时,点标签超出绘图区域的部分会被裁剪掉。

  上图分别为将pointLabelsColor属性设置为黑色和绿色的效果。看到这您有可能会有疑问:咦怎么只改变了坐标的颜色,而折线上点的颜色没有变?注意了,这里的点标签是指图表上对数据点加以说明的信息部分,不包括点本身的显示。

  例如,我们需要以:(15,23)这样的格式来显示点标签,可以这样设置,即可实现上文中点标签的显示格式效果:

  QXYSeries类中封装了一系列的重载方法用于操作图表的数据源进行增删改。QXYSeries内部用一个模板类型为QPointF的QVector来持有数据源,其声明在qxyseries_p.h头文件内:

  可以调用append的对应重载方法,或者是重载操作符添加单个点或者整个点集到数据源的尾部:

  对应地,不管以何种方式,成功添加数据后都会触发pointAdded(int index)信号,index为被添加的数据的下标。需要注意:每添加一个点就会触发一次pointAdded信号,即批量添加数据时会触发对应次数的pointAdded。

  与增加数据类似,成功删除数据后会触发对应次数的pointRemoved(int index)信号,index为被删除的数据的下标。

  当只替换数据源的局部数据点(调用前四种重载方法)时,会触发pointReplaced(int index)信号,index为被替换的点的下标;而当替换了整个数据源数据(调用后两种方法)时,则会触发pointsReplaced()信号。

  需要注意:调用replace后两种重载替换整个数据源时,传QList还是传QVector在性能上是有所区别的:直接传入QList结构的数据集远远比逐个点替换或者先清除所有点再添加这两种方式的效率要高。而直接传入QVector结构的数据集又比前者效率要高。因此:需要批量更新数据点时,应当优先选择void replace(QVectorQPointF points);这个重载方法。究其原因:本小节一开始就介绍了,QXYSeries内部持有数据源的数据结构为QVectorQPointF,而参数为QListQPointF的重载方法的内部实现也是将QList转换为QVector,再调用参数为QVectorQPointF的重载方法实现对数据的更新,无形中多了一个数据转换的步骤,拉低性能:

  与更新replace方法批量更新数据源的重载类似,points()方法获取数据源的方法,内部实现也是获取原始数据源再将其转为QList类型返回;pointsVector()方法则直接返回原始的QVector数据源。

  运行程序,执行光标移动到图表序列上-左键双击-光标从图表序列上方移开,结果如下:

  每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

本网转载作品的目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。如涉及作品内容、版权等问题,请联系我们进行修改或删除!

联系我们 -