参考文章:https://segmentfault.com/a/1190000022114010
一、QCustuomPlot的分层机制
QCustomPlot的分层系统是控制图中元素渲染顺序的机制。最初,QCustomPlot有五个层:“background”、“grid”、“main”、“axes”和“legend”(按顺序)。最上面两层“轴”和“图例”包含默认轴和图例,因此它们将绘制在顶部。
中间是“主”层。它最初为空并设置为当前层(请参见QCustomPlot::setCurrentLayer)。默认情况下,将在该图层上创建所有新的打印表、项目等。然后是“grid”层,其中包含QCPGrid实例(它们严格属于QCPAxis,请参见QCPAxis::grid)。AxisRect背景应绘制在其他所有对象的后面,因此默认的QCPAxisRect实例被放置在“背景”层上。当然,可以根据需要更改各个对象的层从属关系(QCPLayerable::setLayer)。
控制对象的顺序很容易:用QCustomPlot::addLayer在想要的位置创建一个新层,例如在“main”上面。然后使用QCustomPlot::setCurrentLayer将当前层设置为新层,最后正常创建对象。由于当前图层设置,它们将自动放置在新图层上。或者,您也可以忽略当前层设置,在创建对象之后,使用qcplayerbable::setLayer将它们移动到所需的层。
也可以移动整个层。例如,如果希望栅格显示在“main”图层上所有绘图表/项目的前面,只需使用QCustomPlot::moveLayer将其移到“main”上方。
一个层中的渲染顺序只是按创建或插入的顺序。
最后创建(或最后添加到图层中)的项目将绘制在该图层上所有其他对象的顶部。
删除图层后,图层上的对象不会随之删除,而是落在已删除图层下方的图层上
,请参见QCustomPlot::removeLayer。
二、QCPAbstractIte
QCPAbstractIte
是绘图中所有项的抽象基类。
在QCustomPlot中,项是补充图形元素,既不是绘图表(qcpastractplottable),也不是轴(QCPAxis)。虽然绘图仪始终绑定到两个轴上,因此也可以将项目放置在独立于任何轴的绝对坐标中。每个特定项目至少有一个控制定位的QCPItemPosition成员。有些项由多个坐标定义,因此有两个或多个QCPItemPosition成员(例如,QCPItemRect具有左上角和右下角)。
这个抽象基类定义了一个非常基本的接口,比如可见性和裁剪。因为这个类是抽象的,所以不能实例化。使用其中一个子类或自己创建一个子类来创建新项。
内置项包括:
QCPItemLine
: 由起点和终点定义的线。每侧可能有不同的结尾样式(例如箭头)。
QCPItemStraightLine
: 由起点和方向点定义的直线。与QCPItemLine不同,直线是无限长的,没有结尾。
QCPItemCurve
: 由起点、终点和两个中间控制点定义的曲线。每侧可能有不同的结尾样式(例如箭头)。
QCPItemRect
:一个长方形
QCPItemEllipse
: 椭圆
QCPItemPixmap
:任意像素
QCPItemText
:文本标签
QCPItemBracket
:一种括号,可以用来参考/突出显示绘图中的某些部分。
QCPItemTracer
: 一种可以附加到QCPGraph上并在给定关键坐标的情况下粘在其数据点上的项目
QCPAbstractItem默认存在于QCustomPlot的当前层中,默认的当前层为main,我们可以通过setClipToAxisRect和setClipAxisRect设置Item裁切于某个特定的轴矩形,将setClipToAxisRect设置为false则Item裁切于QCustomPlot
QCPItemPosition继承自QCPItemAnchor,QCPItemAnchor用于给QCPItemPosition定位用的,QCPItemPosition则表示了Item的位置,一个Item可以有多个QCPItemAnchor和QCPItemPosition
我们主要理解QCPItemPosition是如何决定Item的位置的,它有四种位置类型:
ptAbsolute 按像素的方式
ptViewportRatio 按QCustomPlot可视区域的比例
ptAxisRectRatio 按其存在的轴矩形的比例(通过setAxisRect函数设置轴矩形)
ptPlotCoords 按坐标系位置(通过setAxes函数轴)
可以通过setType、setTypeX、setTypeY函数设置x、y方向的位置类型,然后通过setCoords设置其位置,setCoords是跟setType设置的类型相关的,Item的位置还跟它锚定的父锚点QCPItemAnchor相关,可以通过setParentAnchor、setParentAnchorX、setParentAnchorY函数设置x、y方向的父锚点,父锚点决定了其起点位置,当设置父锚点后,type类型会变为ptAbsolute按像素的方式~~~~
我们可以直接通过setPixelPosition设置Item的像素位置,而不用管setType的类型是什么,通过pixelPosition返回Item的像素位置
三、QCPItemTracer
参考文章:https://segmentfault.com/a/1190000022114010一、QCustuomPlot的分层机制QCustomPlot的分层系统是控制图中元素渲染顺序的机制。最初,QCustomPlot有五个层:“background”、“grid”、“main”、“axes”和“legend”(按顺序)。最上面两层“轴”和“图例”包含默认轴和图例,因此它们将绘制在顶部。中间是“主”层。它最初为空并设置为当前层(请参见QCustomPlot::setCurrentLayer)。
QCustomplot
绘制热力图Hotmap时,加矩形框中目标区域
QCP
Colormap矩形框绘制
QCP
Item
Rect
的使用方法说明(废话)解决方案
说明(废话)
这里只是说明我的问题,请寻找解决方案的直接跳到解决方案处查看。
对于我的项目来说,我的热力图有时候需要被某些算法来输出一个矩形,并被标记热力图上的部分目标区域。于是,热力图已经绘制出来,如何绘制矩形是个问题,因为热力图可以通过鼠标放大缩小,这是矩形也应该跟随矩形放大缩小移动位置等。本身热力图就是通过
QcustomPlot
开源代码实现,于是查看其
一、是什么
说起图,大家一下就可能想到折线图、柱状图和饼图等,但是除了这些显眼的东西以外其实还有很多东西辅助的存在着,有了这些辅助的东西图才会看起来有意义,或者说更加的真实、有说服力。这些东西都包括那些呢?首先坐标轴肯定是不能少了的,还有网格线、图例和示意说明等。这一节我们就重点来围绕这个示意说明也就是
QCP
Abstract
Item
来做以解释
二、效果图
这里我将首先贴张...
1、下载源文件http://www.
qcustomplot
.com/;
2、把.cpp和.h放在工程目录下,并将cpp和h加入工程;
3、在.pro中:
QT
+= printsupport;
4、在ui中添加一个Widget,右键提升为,输入:
QCustomPlot
,改变对象名称为customPlot;
5、加入代码:
void MainWindow::initUi()
QVecto...
m_sameTimeTracer = new
QCP
Item
Tracer(SameTimeCompareCustomPlot);
m_sameTimeTracer->setParent(SameTimeCompareCustomPlot); //设置标记点的父类
m_sameTimeTracer-&g...
文章目录
QCP
Item
Anchor与
QCP
Item
Position联系与区别
QCP
Item
Bracket
QCP
Item
Curve
QCP
Item
Text
QCP
Item
Tracer
在
QCustomPlot
中,所有的
Item
都继承自
QCP
Abstract
Item
,
QCustomPlot
给我们提供了一些
Item
QCP
Item
Bracket 括号
Item
QCP
Item
Curve 曲线
Item
,其实...
Item
s:Supplementary graphical elements
Item
s辅助图形元素
QCustomPlot
允许放置和锚定图形元素比如文本,箭头,线,矢量图形等等。他们是基于抽象基类
QCP
Abstract
Item
。关于
Item
机制的细节描述和访问内建的
item
s可以在
QCP
Abstract
Item
文档中找到。
使用箭头和文本的简单例子
// add the te
ui->customPlot->legend->setVisible(true);
ui->customPlot->legend->setFont(QFont("Helvetica", 9));
ui->customPlot->legend->setTextColor(
Qt
::red);
设置图标大小
在QML中使用
QCustomPlot
的曲线/折线示例可以通过以下步骤实现:
首先,确保在项目文件中包含
QCustomPlot
库,并在QML文件中导入
QCustomPlot
库。
在QML文件中,创建一个QML窗口并添加一个
QCustomPlot
对象。然后,创建一个
QCP
Graph对象,并将其添加到
QCustomPlot
中。在
QCP
Graph对象中,设置数据点并配置曲线的样式、颜色、线宽等属性。
例如,可以在QML中按照以下步骤配置
QCustomPlot
的曲线/折线示例:
```qml
import
Qt
Quick 2.15
import
Qt
Charts 2.3
Item
{
id: plotWindow
QCustomPlot
{
id: customPlot
anchors.fill: parent
// 创建一个曲线对象
QCP
Graph {
id: graph
lineStyle:
QCP
Graph.LineStyle.lsLine
linePen:
Qt
.rgba(0, 0, 255, 255)
// 设置曲线的数据点
data: [
{ x: 1, y: 2 },
{ x: 2, y: 3 },
{ x: 3, y: 1 },
// ...
在这个例子中,我们创建了一个QML窗口并在其中添加了一个
QCustomPlot
对象。然后,我们在
QCustomPlot
中创建了一个
QCP
Graph对象,并通过设置data属性来定义曲线的数据点。最后,我们设置了曲线的样式和颜色。
通过以上步骤,就可以在QML中使用
QCustomPlot
来绘制曲线/折线示例。同时,可以根据具体需求进一步定制曲线的样式和属性,以实现更加丰富多彩的数据可视化效果。