QCustomPlot 怎么获取图像中的点对应当前坐标轴的坐标

QCustomPlot 怎么获取图像中的点对应当前坐标轴的坐标,第1张

MouseEvent->pos()可以获得相对于viewport()的坐标pos,

然后

size1=customPlot->viewport()size();

size2=customPlot->axisRect()->size();

pos-(size1-size2)/ 2就可以获得鼠标点击位置的坐标

MouseEvent->pos()可以获得相对于viewport()的坐标pos,

然后

size1=customPlot->viewport()size();

size2=customPlot->axisRect()->size();

pos-(size1-size2)/ 2就可以获得鼠标点击位置的坐标

MouseEvent->pos()可以获得相对于viewport()的坐标pos,

然后

size1=customPlot->viewport()size();

size2=customPlot->axisRect()->size();

pos-(size1-size2)/ 2就可以获得鼠标点击位置的坐标

MouseEvent->pos()可以获得相对于viewport()的坐标pos,

然后

size1=customPlot->viewport()size();

size2=customPlot->axisRect()->size();

pos-(size1-size2)/ 2就可以获得鼠标点击位置的坐标

本文为QCustomPlot 官方教程 的中文翻译版。

本教程使用 customPlot 指针指向 QCustomPlot 实例。如果您在 QtCreator 中提升了一个小部件,可以通过 ui->customPlot (或您为小部件指定的任何名称)访问相应的小部件。

您可以通过 customPlot ->addGraph() 在图中创建一个新图形 。然后,通过 customPlot ->graph (0) ->setData ()为图形分配一些数据点,例如以两个QVector<double>的形式表示 x 和 y ( 键 和 值 )。QCustomPlot 使用术语 而不是 x y 的原因是为了允许更灵活地分配哪个轴具有什么作用。因此,如果您将左轴定义为“关键轴”,将底部定义为“值轴”,您可以在图的左侧绘制一个直立的图形。默认情况下,QCustomPlot 小部件有四个轴: customPlot ->xAxis , yAxis , xAxis2 , 和 QCPAxis 类型的 yAxis2

,对应于下、左、上、右轴。它们的范围定义了绘图的哪个部分当前可见: customPlot ->xAxis ->setRange (-1, 1)。

要对绘图进行任何类型的更改,请调用 customPlot ->replot() 。请注意,当小部件调整大小和触发内置用户交互时,将自动发生重新绘制。例如用鼠标拖动轴范围和用鼠标滚轮缩放这样的用户交互。

输出应如下所示。

刻度步长和标签由轴当前使用的轴刻度自动 选择 。这是 类型 QCPAxisTicker 的一个实例,可以通过如 xAxis ->ticker() 访问。您可以通过 xAxis ->ticker() ->setTickCount (6)调整ticks 数量,ticker 尝试创建的大致ticks 数量。默认轴标记非常适合简单的数字显示,但也有专门的类,例如时间跨度、日历日期、类别、pi(或其他符号单位)和对数轴。有关详细信息,请参阅 QCPAxisTicker 文档。

轴的刻度标签(数字)永远不会超出小部件边框,即使它们变宽也是如此。这是由于默认启用的自动页边距计算。如果刻度标签和轴标签需要更多空间,它会使轴矩形缩小。如果您不希望自动确定边距,请通过调用 customPlot ->axisRect() ->setAutoMargins ( QCP ::msNone )禁用该行为。然后您可以通过 customPlot ->axisRect() ->setMargins ()手动调整边距。

QCustomPlot(一):基础

QCustomPlot(三):图形绘制基础之样式修改

QCustomPlot采用了诸如自适应采样和文本对象缓存之类的各种技术,以减少重新绘制所需的时间。但是,某些功能(如复杂的半透明填充和粗线)仍会导致速度显着下降。如果您在应用程序中注意到这一点,这里有一些有关如何提高重复打印性能的提示。

到目前为止,大部分时间都花在了绘图功能上,尤其是在绘制高密度图和其他绘图表时。为了获得最佳性能,请考虑以下几点:

特别是在图形,粗线,半透明颜色下/之间使用复杂的填充时:通过QCustomPlot :: setOpenGl启用QCustomPlot的OpenGL硬件加速渲染。有关如何正确启用OpenGL加速的详细信息,请参见此处的文档。OpenGL加速可用于QCustomPlot支持的所有Qt版本,并且分别选择了相应的后端。 对于50之前的Qt版本,QCustomPlot自己的OpenGL加速的替代方法是在创建QApplication对象之前提供“ -graphicssystem opengl”作为命令行参数或进行调用。这样可以实现应用程序范围的OpenGL加速。

QApplication::setGraphicsSystem(“opengl”)

请注意,使用OpenGL加速,最大帧速率可能会受到显示器垂直同步频率的限制(可以在图形卡驱动程序配置中禁用VSync)。因此,对于简单绘图(潜在帧速率远高于每秒60帧),OpenGL加速可能会在数值上低于默认软件渲染器,因为它没有限制在VSync频率上。

避免笔宽度大于一的线。这与默认软件渲染器尤其相关,而与OpenGL加速无关。

避免复杂的填充,例如,在具有数千个点的图形之间进行通道填充。这与默认软件渲染器尤其相关,而与OpenGL加速无关。

如果仅由于非复杂对象(例如,某项)已更改而在图中具有相对静态但复杂的图形时,通常需要调用完整的QCustomPlot :: replot,请考虑将定期更改的对象放置在自己的图层上并对其进行设置模式(QCPLayer :: setMode)到QCPLayer :: lmBuffered。这使QCustomPlot为该层分配了专用的绘制缓冲区,并允许使用QCPLayer :: replot对其进行单独重新绘制,而与包含潜在复杂图和慢图的其他层无关。有关详细信息,请参见相应方法的文档。

仅Qt4:使用Qt 48或更高版本。与Qt 47相比,性能提高了两倍或三倍。但是,QPainter损坏了,并且绘制像散点图这样的像素精确元素的效果不如Qt 47好。因此,切换到Qt 48时,是性能与绘图质量之间的折衷。QCustomPlot在内部尝试解决此类最严重的故障。

要在范围拖动期间提高响应速度,请考虑将QCustomPlot :: setNoAntialiasingOnDrag设置为true。仅在使用默认软件渲染器时才有意义。(OpenGL抗锯齿不能即时切换,这需要对样本缓冲区进行昂贵的重新分配。)

仅限于Qt4:在X11(GNU / Linux)上,请避免使用较慢的本机绘图系统,通过提供“ -graphicssystem raster”作为命令行参数或在创建QApplication对象之前调用来使用栅格QApplication::setGraphicsSystem(“raster”)。

避免使用任何类型的alpha(透明)颜色,尤其是在填充中。

避免任何形式的抗锯齿,尤其是在图形行中(请参见QCustomPlot :: setNotAntialiasedElements)。仅在使用默认软件渲染器时才有意义。

避免重复设置完整的数据集,例如使用QCPGraph :: setData。如果大多数数据点保持不变,例如在运行的测量中,请改用QCPGraph :: addData。您可以通过QCPGraph :: data访问和 *** 作现有数据。

作为最后的选择,请尝试减少任何给定时刻在可见键范围内的数据点数量,例如通过限制最大键范围跨度(请参阅QCPAxis :: rangeChanged信号)。QCustomPlot可以非常有效地优化掉数百万个屏幕外点

以上就是关于QCustomPlot 怎么获取图像中的点对应当前坐标轴的坐标全部的内容,包括:QCustomPlot 怎么获取图像中的点对应当前坐标轴的坐标、qcustomplot坐标轴绘图按x轴大小排序方式绘图、qcustomplot怎么判断点是否在曲线上等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10130464.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存