Qt QChart使用指南

问题1:如何在设计界面中添加QCharView控件?

1 首先在项目配置文件添加 charts 模块     Qt += charts
2 打开设计界面,将 Widget 容器,拖动到界面上,鼠标右击 Widget 容器,选择提升的窗口部件,选择基类名称 QWidget,提示的类名称 输入QChartView, 点击添加。
3 选中QChartView,点击提升,此时原QWidget控件就会变为QCharView控件。
4 在项目头文件中中导入QtCharts    #include <QtCharts> 

问题2:QChart的组成部分

1 QChart主要由一下几个大类组成:QChartView类、QChart类、QAbstractSeries类、QValueAxis类
2 QChartView类 为画布对象,   
3 QChart类是真正的图表对象,不过QChart需要添加在QChartView对象下才可在正确展示出来
4 QAbstractSeries类是数据集合,主要子类为QLineSeries——折现类,在QChart中添加QAbstractSeries,才可以展示出数据,否则QChart只能展现坐标轴
5 QValueAxis类是坐标轴类,用来设置QChart类的坐标轴属性,包括范围、精度等,也用来将QAbstractSeries类与QChart类对应起来。    

简单QChart实现

 1 // widget.h 
 2     QChartView * MyChartView;   // 画布对象
 3     QChart MyChart;             // 图表对象
 4     QLineSeries MyLineSeries;   // 展示在图表对象上面的线对象
 5     QVector<QPointF> MyPointf;  // 绘制线对象所需要的数据
 6     QValueAxis MyAxisX;         // X轴
 7     QValueAxis MyAxisY;         // Y轴
 8 
 9 // widget.cpp 构造函数
10     // 1.获取画布
11     MyChartView = ui->widget;
12     // 2.展示坐标对象(将坐标对象放到画布上)
13     MyChartView->setChart(&MyChart);
14     // 3.给序列对象添加数据
15     for(int i = 0; i < 100; i ++)
16     {
17         MyPointf << QPointF(i,i);
18     }
19     MyLineSeries.replace(MyPointf);
20     // 4.将序列添加到坐标对象中
21     MyChart.addSeries(&MyLineSeries);

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

效果展示

 

QChartView类方法

1 // 1.通过鼠标左键选中矩形,来放大这个矩形,同时鼠标右键,具备缩小图的功能
2 void QChartView::setRubberBand(const QChartView::RubberBands &rubberBand)

QChart类方法

 1 // 1.添加自定义坐标轴        Qt::AlignLeft 左侧X轴    Qt::AlignBottom 下端Y轴
 2 void addAxis(QAbstractAxis *axis, Qt::Alignment alignment)    
 3 // 2.设置默认坐标轴(QChart为根据系列上的数据,创建合适的坐标轴,数据中最小/最大的x值为坐标的x的范围,数据中最小/最大的y值为坐标的y的范围)
 4 void createDefaultAxes()
 5 // 3.移除坐标轴
 6 void removeAxis(QAbstractAxis *axis)    
 7 // 3.添加单个系列
 8 void addSeries(QAbstractSeries *series)    
 9 // 4.移除单个系列
10 void QChart::removeSeries(QAbstractSeries *series)
11 // 5.移除全部系列
12 void QChart::removeAllSeries() 
13 // 6.平移
14 void scroll(qreal dx, qreal dy)
15 // 7.设置外边距,通过设置负数可以是图表外面的空白减小   QMargins m(-10,-10,-10,-10);
16 void setMargins(const QMargins &margins)
17 // 8.设置图表绘制的位置,注意:不包含坐标轴     QRectF r(0,0,600,400);   此时将看不到Y轴坐标轴
18 void setPlotArea(const QRectF &rect)
19 // 9.设置标题
20 void setTitle(const QString &title)
21 // 9.1设置绘制标题的画刷
22 void setTitleBrush(const QBrush &brush)
23 // 9.2设置标题的字体 
24 void setTitleFont(const QFont &font)
25 // 10.放大/缩小坐标轴的范围   以图表的中心点开始放大/缩小
26 void zoom(qreal factor)
27 // 11.获取图表的图例,即系列的名称    通过 QLegend.hide() 可隐藏图表中所有的图例   
28 QLegend *QChart::legend() const    

QAbstractSeries类下的QXYSeries方法

 1 QAbstractSeries为系列的基类,其下又分为 QXYSeries类(折线图、样条曲线图、散点图的基类)、QPieSeries类(饼状图)、QAbstractBarSeries类(条状图)等
 2 -QAbstractSeries
 3 ---QXYSeries
 4 -----QLineSeries 折线图
 5 -------QSplineSeries样条曲线图    // 相比较于QLineSeries,更加平滑,同时更加耗时,大概为2.5倍时间,不过总时间很小(10000个点0.3ms),基本可忽略    
 6 -----ScatterSeries 散点图    
 7 ---QPieSeries
 8 ---QAbstractBarSeries    
 9     
10 方法:
11 // 1.1 添加单个数据 不推荐        
12 void append(qreal x, qreal y)
13 // 1.2 添加单个数据 不推荐        
14 void append(const QPointF &point)
15 // 1.3 添加多个数据 不推荐        
16 void append(const QList<QPointF> &points)
17 // 1.4 替换单个数据 不推荐   
18 void replace(qreal oldX, qreal oldY, qreal newX, qreal newY)
19 // 1.5 替换多个数据 不推荐     
20 void replace(QList<QPointF> points)
21 // ***1.6 替换多个数据 极力推荐     (使用replace时,将不需要使用clear())
22 void replace(QVector<QPointF> points)
23 // 2 在系列中根据索引获取坐标
24 const QPointF &at(int index) const
25 // 3 插入某个点   
26 void insert(int index, const QPointF &point)
27 // 4 获取画刷 
28 QBrush brush() const
29 // 5 清空
30 void clear()
31 // 6 获取颜色   折线图、样条曲线图的线条颜色  散点图的填充颜色
32 virtual QColor color() const
33 // 7 获取点的数量
34 int count() const
35 // 8 获取绘制轮廓的笔
36 QPen pen() const
37 // 9 获取所有点
38 QVector<QPointF> pointsVector() const
39 // 10 该系列点是否绘制(是否可见)   注意:设置为false时,看不见凸出的点,但是线仍然可以看见
40 bool pointsVisible() const
41 // 11 设置绘制点的画刷
42 virtual void setBrush(const QBrush &brush)
43 // 12 设置绘制点的笔
44 virtual void setPen(const QPen &pen)    
45 // 13 设置绘制线的画刷  折线图、样条曲线图的线条颜色  散点图的填充颜色
46 virtual void setColor(const QColor &color)
47 // 14.1 设置点的标签,每个点都会被设置
48 void setPointLabelsFormat(const QString &format)
49 // 14.2 设置裁剪,超过图表区域部分会被裁剪
50 void setPointLabelsClipping(bool enabled = true)
51 // 14.3 设置点的标签的颜色
52 void setPointLabelsColor(const QColor &color)
53 // 14.4 设置点的标签的字体
54 void setPointLabelsFont(const QFont &font)
55 // 14.5 设置点的标签的可见
56 void setPointLabelsVisible(bool visible = true)
57 // 15 绑定坐标轴  需要连续绑定X轴、Y轴,而且要与QChart绑定同一组坐标轴
58 bool QAbstractSeries::attachAxis(QAbstractAxis *axis)  

QValueAxis类方法

 1 // 1 设置范围
 2 void setRange(qreal min, qreal max)
 3 void setMax(qreal max)
 4 void setMin(qreal min)    
 5 // 2 设置网格划分类型      QValueAxis::TicksDynamic 按固定值划分  QValueAxis::TicksFixed  按份来划分(默认)
 6 void setTickType(QValueAxis::TickType type); 
 7 // 3 设置主要刻线线  设置为11,则按范围等分为10份, 在 QValueAxis::TicksFixed 时生效
 8 void setTickCount(int count)
 9 // 4 设置次要刻线, 设置为6,即给每个主刻度线在等分为5份  共 10 * 5 50份   在 QValueAxis::TicksFixed 时生效
10 void setMinorTickCount(int count)
11 // 5 按值设置刻度线,每两条刻度线间隔的值为设置的值,在 QValueAxis::TicksDynamic 时生效
12 void setTickInterval(qreal insterval)   
13 // 6 隐藏刻度线 
14 void QAbstractAxis::hide()    
15 // 7 设置主要刻度线的颜色
16 void setGridLineColor(const QColor &color)
17 // 8 设置主要刻度线的画笔
18 void setGridLinePen(const QPen &pen)
19 // 9 设置主要刻度线的可见性
20 void setGridLineVisible(bool visible = true)
21 // 10 设置轴线的颜色
22 void setLinePenColor(QColor color)
23 // 11 设置轴线的可见性
24 void setLineVisible(bool visible = true)
25 // 12 设置标题
26 void setTitleText(const QString &title)
27 void setTitleFont(const QFont &font)
28 void setShadesColor(QColor color)
29 void setShadesPen(const QPen &pen)
30 void setShadesBrush(const QBrush &brush)
31 void setTitleVisible(bool visible = true)
32 // 13 设置标签
33 void setLabelsAngle(int angle)
34 void setLabelsColor(QColor color)
35 void setLabelsFont(const QFont &font)
36 void setLabelFormat(const QString &format)      // ("%d")  %d为十进制显示   

问题3:如何刷新QChart?

1 // 1.更新坐标点
2 // 2.更新系列中的数据  注意:不需要将该系列从图表中移除
3 MyPointf.clear();
4 for(int i = 0; i < 10000; i ++)
5 {
6     MyPointf << QPointF(i,i + QRandomGenerator::global()->bounded(0,10));
7 }
8 MyLineSeries.replace(MyPointf);
9 MySplineSeries.replace(MyPointf);

问题4:如何设置固定的坐标轴?

 1 // 1.创建坐标轴,分X、Y轴
 2 // 2.设置坐标轴属性 范围、样式等
 3 // 3.给图表绑定坐标轴
 4 // 4.给系列绑定坐标轴  
 5 
 6 QValueAxis MyAxisX;         // X轴
 7 QValueAxis MyAxisY;         // Y轴
 8 
 9 MyAxisX.setRange(0,100);
10 MyAxisY.setRange(0,100);
11 
12 MyChart.addAxis(&MyAxisX,Qt::AlignLeft);
13 MyChart.addAxis(&MyAxisY,Qt::AlignBottom);
14 
15 MyLineSeries.attachAxis(&MyAxisX);
16 MyLineSeries.attachAxis(&MyAxisY);
17 MySplineSeries.attachAxis(&MyAxisX);
18 MySplineSeries.attachAxis(&MyAxisY);

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 5
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中,可以使用QChart进行图表的创建和显示,通过使用QChartView来显示图表,并提供一些与图表交互的功能,例如缩放。 缩放是一种常见的图表交互操作,它允许用户在图表中放大或缩小特定的区域。在Qt中,可以通过以下步骤实现图表的缩放: 1. 创建一个QChartView的实例,并将其作为主窗口的中心组件。 2. 通过QChartView的chart()方法获取到图表的指针。 3. 创建一个QValueAxis的实例来表示X轴和Y轴,并设置其范围(即图表的可见区域)。 4. 将X轴和Y轴添加到图表中,可以使用QChart的addAxis()方法。 5. 创建一个QLineSeries的实例,用于表示图表中的数据,并将其添加到图表中。 6. 使用QChartView的setRenderHint()方法来设置渲染标志,以便在缩放时保持图表的清晰度。 7. 为了实现图表的缩放,可以通过QChartView的setRubberBand()方法来设置橡皮筋模式,当用户选择区域时,图表将自动缩放到所选区域的大小。 8. 可以使用QChartView的setMouseTracking()方法来启用鼠标跟踪,这样可以跟踪鼠标的移动并显示当前鼠标位置的数值。 通过上述步骤,我们可以实现一个基本的图表缩放功能。当用户选择区域时,图表自动缩放到所选区域的大小,并根据缩放比例调整坐标轴和数据的范围,以显示更详细或更全面的数据。 需要注意的是,Qt提供了丰富的图表交互功能和API,可以根据具体需求来进行自定义和扩展。这只是一个基本的示例,可以根据实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值