文章目录
QCustomplot
QCPAxis 描述轴行为,轴需要依赖QCPAxisRect
QCPAxisRect 描述矩形区域,区域依赖于QCPCustomPlot
QCPLayoutGrid 网格形排列矩形区域,类似于QGridLayout
QCustomPlot 默认行为及对象
QLegend 图例
方法
- add函数
void QCPGraph::addData(double key, double value, bool setDirty = true);
// 创建实例
QCPGraph *graph = customPlot->addGraph();
// 添加数据点, 实时更新
graph->addData(1.0, 2.0, true); // 立即更新绘制
// 在批量添加后统一更新图形
graph->addData(2.0, 4.0, false); // 不立即更新绘制
// 批量添加完成后,再进行更新
customPlot->replot(); // 仅在最后一次调用更新图形
QCustomPlot的几个重要类
QCustomPlot 图表类:用于图表的显示和交互;
QCPLayer 图层:管理图层元素(QCPLayerable)
QCPLayerable图层元素:所有可显示的对象都是继承自图层元素;
QCPAbstractPlottable 绘图元素:包含 折线图(QCPGraph)、曲线图(QCPCurve)、柱状图(QCPBars)、QCPStatiBox(盒子图)、QCPColorMap(色谱图)、QCPFinancial(金融图);
QCPAxisRect 坐标轴矩形:一个坐标轴矩形默认包含上下左右四个坐标轴,但是可以添加多个坐标轴
QCPLayer 图层
默认图层: 背景层、网格层、主层、坐标轴层、图例层和矩形选择区域层。
默认情况下,QCustomPlot有六个图层,分别是:“background” “grid” “main” “axes” “legend”和“overlay”(注意顺序)。
QLinearGradient
QLinearGradient 是Qt中的一个渐变类,用于创建线性渐变。它可以被用来创建从一种颜色到另一种颜色的平滑过渡.
QCPItemTracer
QCPItemTracer tracer是比较常用的一个Item,它主要用来实时跟踪QCPGraph的某个数据点.
[QCPItemTracer]
double x = gCustomplot->xAxis->pixelToCoord(e->pos().x()); // 取得鼠标地位处对应的横坐标数据x
tracer->setGraph(gCustomplot->graph(0)); // 将游标跟该曲线图层想衔接
tracer->setGraphKey(x); // 将游标横坐标设置成刚取得的横坐标数据x
tracer->setInterpolating(false); // false 跟踪程序主动获取最接近键的数据点,不一定准确 ;true 跟踪程序将精准的指定在键处
tracer->updatePosition(); //如果跟踪器和一个图形衔接,调用此函数更新跟踪程序位置驻留在图形的数据,取决与键
QCPItemStraightLine
QCPItemStraightLine 是一个Qt Charts中的类,用于绘制直线图。它可以在图表中添加一条直线,用于表示数据的趋势或者某个特定值.
[QCPItemStraightLine]
selectTest(QPointF, bool);//
1.pos :QCustomplot 表面像素点
2.selected :QCustomPlot::setInteractions包含QCustomPlot::iSelectItems
QCPItemText
//创建
mItemText = new QCPItemText(this);
mItemText->setPositionAlignment(Qt::AlignCenter);
mItemText->position->setType(QCPItemPosition::ptAxisRectRatio);
mItemText->position->setCoords(0, 0.9);
mItemText->setPen(penDefault); //字体颜色
mItemText->setBrush(clrDefault);
mItemText->setPadding(QMargins(2, 2, 2, 2));//文字距离边框几个像素
mItemText->setText("a");
锚点
- setParentAnchorX和setParentAnchorY的区别?
说明:分别设置x、y方向的父锚点,父锚点决定了其起始点位置
举例:
//mItemText x方向父锚点随直线移动 y方向父锚点不动, 效果就是线mTracerLine左右移动时,mItemText 当然跟随左右移动
mItemText->position->setParentAnchorX(mTracerLine.at(0)->point2);
//mItemText y方向父锚点随直线移动 x方向父锚点不动, 效果就是线mTracerLine左右移动时,mItemText 不会跟随左右移动,只有当线能进行上下y方向移动时,其跟随上下y方向移动
mItemText->position->setParentAnchorY(mTracerLine.at(0)->point2);
问题
1.创建游标线时,坐标轴不绑定会出现以下问题
virtual QPointF QCPItemPosition::pixelPosition() const Item position type x is ptPlotCoords, but no axes were defined
解决方法:
//...
QCPAxis *keyAxis = mAxisRects.at(0)->axis(QCPAxis::atBottom, 0);
QCPAxis *valueAxis = mAxisRects.at(0)->axis(QCPAxis::atLeft);
//...
mTracerLine = new QCPItemStraightLine(this);
mTracerLine->point1->setType(QCPItemPosition::ptPlotCoords);
mTracerLine->point2->setType(QCPItemPosition::ptPlotCoords);
mTracerLine->point1->setAxisRect(mAxisRects.at(1));
mTracerLine->point2->setAxisRect(mAxisRects.at(1));
//下面这个极为重要
mTracerLine->point1->setAxes(keyAxis, valueAxis);
mTracerLine->point2->setAxes(keyAxis, valueAxis);