相关文章推荐
鬼畜的杨桃  ·  页面弹出视频 - CSDN文库·  5 月前    · 
没人理的路灯  ·  if多个div jquery ...·  1 年前    · 
低调的海豚  ·  Android ...·  1 年前    · 
焦虑的铁板烧  ·  LINQ to Object - ...·  1 年前    · 

QCustomPlot已经为我们提供了文字框QCPItemText、直线(可设置带箭头)类QCPItemLine。

一、QCPItemText的基本用法:

textLabel = new QCPItemText(this);//在QCustomplot中新建文字框
textLabel->setPositionAlignment(Qt::AlignTop|Qt::AlignLeft);//文字布局:顶、左对齐
textLabel->position->setType(QCPItemPosition::ptAxisRectRatio);//位置类型(当前轴范围的比例为单位/实际坐标为单位)
textLabel->position->setCoords(0.5, 0); //把文字框放在X轴的中间,Y轴的最顶部
textLabel->setText("Text Item Demo");
textLabel->setFont(QFont(font().family(), 16)); //字体大小
textLabel->setPen(QPen(Qt::black)); //字体颜色
textLabel->setPadding(QMargins(2,2,2,2));//文字距离边框几个像素

美中不足的是,官方没有提供设置QCPItemText背景色的方法,默认背景是透明的。不过好在有源码,我们改改官方源码,使他支持设置背景色。修改步骤如下:

跳转到QCPItemText类的virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE函数里来看一下,

QCPItemText绘制边框、绘制文字都是在这个函数里干的,上面红色框的那一句是我自己加的,我把背景设置成了绿色(原理就是在绘制方框、文字之前,先绘制一个绿色矩形面)。知道了这一点,我们就可以添加一个private的QColor变量,然后通过public接口操作这个颜色就可以随时修改文字框的背景了。

二、下面再看看QCustomPlot的直线类QCPItemLine

基本用法如下:

arrow = new QCPItemLine(this);
arrow->start->setParentAnchor(textLabel->bottom);  //设置该直线的起点为文字框的下锚点  
arrow->end->setCoords(4, 1.6); //设置直线终点为坐标系中的点
arrow->setHead(QCPLineEnding::esSpikeArrow);//设置箭头类型(三角形、菱形、方形等)
arrow->setVisible(false);

较为简单,不再赘述。

三、设置跟随锚定点

setParentAnchor(QCPItemAnchor *)、
setParentAnchorX(QCPItemAnchor *) 、
setParentAnchorY(QCPItemAnchor *)

设置锚定点的作用是什么?

举2个例子:

(1)我们在plot中画了一个箭头,箭头的起点位于某文本框的底部中心,如本文的第一张图所示,我们希望当文本框发生移动时,箭头的起点能够总是保持在文本框的底部中心,实现这一功能,只需把箭头的起始点设置为锚定到文本框的底部锚上即可:arrow->start->setParentAnchor(textLabel->bottom);

(2)我们在plot中添加了一个游标和文本框,我们希望游标能跟随鼠标实时移动,然后文本框紧贴plot的左边沿,文本框的Y位置总是等于游标的Y位置。由于游标、文本框都继承了QCPAbstractItem,都具备锚定功能,只需把文本框的Y位置锚定在游标锚的Y位置上即可。

图形元素中的QCPItemAnchor 或QCPItemPosition类型的成员就是锚定点(见上图),QCustomplot中的QCPAbstractItem类型的图形元素(见下图)都有锚定点,

文本框类QCPItemText含有4个锚点成员变量:上下左右,锚点坐标就是文本框四边的正中心。如果设置了某个QCPAbstractItem对象的锚点锚定(也可以设置只锚定X值或Y值)在文本框的某个锚点上,那么QCPAbstractItem对象的锚点(或者X坐标/Y坐标)就会总是等于文本框的锚点坐标。

效果图如下:QCustomPlot已经为我们提供了文字框QCPItemText、直线(可设置带箭头)类QCPItemLine。一、QCPItemText的基本用法:textLabel = new QCPItemText(this);//在QCustomplot中新建文字框textLabel->setPositionAlignment(Qt::AlignTop|Qt:...
一、基本形元件 1、QCustomPlot提供文字箭头、连线、图片形元件,以满足用户需要。它们都是继承于QCPAbstractItem这个基类。 继承关系如下: 看官网上的例子:// add the text label at the top: QCPItemText *textLabel = new QCPItemText(customPlot); customPlot->add
Items:Supplementary graphical elements Items辅助形元素 QCustomPlot允许放置和锚定形元素比如文本,箭头,线,矢量形等等。他们是基于抽象基类QCPAbstractItem。关于Item机制的细节描述和访问内建的items可以在QCPAbstractItem文档找到。 使用箭头和文本的简单例子 // add the te
Qt QCustomPlot 是一种用于绘制表的 C++ 库。它提供了许多绘和数据可视化工具,支持多坐标轴和游标功能。如果想要在多个坐标轴之间同步游标,可以采取以下步骤: 1. 定义多个坐标轴,每个坐标轴对应不同的数据集。 2. 定义游标对象,为每个坐标轴创建一个游标实例。 3. 在游标对象的信号回调,根据游标位置计算出每个坐标轴对应的数据点,并更新其他坐标轴的游标位置。 4. 使用 QCPMarginGroup 类实现坐标轴间的同步。这个类可以让多个 QCPAxis 对象在它们之间共享边距,并在其一个对象的边距被更改时,自动更新其他对象的边距。 5. 利用 QCPItemRect 对象实现游标的跟踪,并在每个坐标轴上绘制游标所在的值。 总之,Qt QCustomPlot 提供了一种简单直观的方式,来实现多坐标轴游标同步的功能。通过建立坐标轴之间的联系,游标位置的联动效果可以轻松实现。如果需要进行更加高级的数据可视化和分析,还可以结合其他的 Qt 工具和库进行扩展。