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