其他分享
首页 > 其他分享> > Qt QChart使用指南

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);

效果展示

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);

 

标签:10,const,Qt,QChart,void,坐标轴,设置,使用指南
来源: https://www.cnblogs.com/ybqjymy/p/16466718.html