zoukankan      html  css  js  c++  java
  • Qt QChart缩放后坐标轴间隔取整

    使用qt的qchart显示数据曲线,坐标轴QValueAxis可以设置刻度间隔数量,但每个刻度的数值是根据坐标的极值除以间隔数量得到的,不一定是整数,导致曲线控件的显示刻度不适合观察。

    如图:

    纵坐标刻度带有小数,观察数据曲线时,就不容易计算曲线的波动。解决方法很简单,就是设置曲线坐标范围后,根据坐标范围计算设置间隔数量,让每个刻度都是整数,例如:

    范围-100~700,共8个区域,9个刻度,所以:

    1 mAyis0->setTickCount(9); //会划分成几个单位·
    2 mAyis0->setRange(-100,700);
    3 mAyis0->setLabelFormat("%d"); //设置刻度的格式

    这样就解决了初始化时曲线控件的坐标轴间隔取整问题,但是曲线控件显示过程中认为进行缩放,坐标轴间隔就会随着人画的缩放区域变化,出现小数(不整的数)。

    所以还需要加入坐标轴对范围变化的响应,例如,要将坐标轴的刻度值设置成10的倍数:

    connect(mAyis0,SIGNAL(rangeChanged(qreal, qreal)),this,SLOT(mAyis0_rangeChanged(qreal, qreal)));
    然后在坐标范围变化时,首先给最小值取整,然后将最大值变化到间隔可以取整的值。
     1 void MainWindow::mAyis0_rangeChanged(qreal min, qreal max)
     2 {
     3     u32 mi=min,ma=max;
     4     u32 t0=mi%10;
     5     if(t0)
     6     {
     7         mi+=10-t0;
     8     }
     9     u32 t=ma-mi;
    10     t0=t%80;
    11     if(t0)
    12     {
    13         ma+=80-t0;
    14     }
    15     mAyis0->setRange(mi,ma);
    16 }

    这样每次人工选择缩放区域都能变化到可取整的区域,效果:

  • 相关阅读:
    (转)-为什么分布式一定要有Redis?
    (九)redis使用lua脚本
    (八)redis实现分布式锁
    (七)面试题-Redis比较常见的面试题-转载
    (六)redis缓存穿透,击穿,雪崩以及解决方案
    (五)redis的主从复制
    (四)redis的数据持久化-RDB,AOF
    (三)redis的其他功能-Bitmap,HyperLogLog,GEO
    JsTracker
    Web开发者助手 FeHelper
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13278480.html
Copyright © 2011-2022 走看看