在 qt 中的绘图中拖动误差线
Drag an errorbar around in a plot in qt
我在Qt 5.9中使用QPainter使用C++来制作绘图并根据鼠标事件进行更新。
我想知道如何绘制如下所示的误差线:
-
|
-
当然,垂直线和水平线之间不应该有间隙。
我需要能够在绘图上拖动误差线,并在释放鼠标按钮时获得误差线中心位置的坐标。到目前为止,我已经用轴和标签制作了一个图。不确定如何使用QPainter或任何其他Qt lib类获取错误栏。
请提供一些关于如何制作/绘制误差线的见解。有没有一种简单的方法可以在 QPainter 中做到这一点?
如果您使用的是 QPainter,您应该自己实现拖放。如果你的地块上没有太多对象,这并不难。
这是基本思想:
首先渲染所有对象。而不是您需要在绘图小部件中重新实现mousePressEvent
和mouseMoveEvent
。在mousePressEvent
中,您应该检查是否已单击可拖动对象并将此对象定义为当前正在拖动的对象。mouseMoveEvent
只需通过更改其坐标并重新渲染绘图来移动此对象(如果有)。
您可能希望优化绘图以避免在每次鼠标移动时重新渲染完整的绘图。这可以通过 绘制很少变化的对象QPixmap
/QImage
,而不是在小部件上渲染此QPixmap
/QImage
,而不是绘制误差线和所有其他类型的对象,这些对象可能在此像素图上每次移动时都会发生变化。在每次重绘时,您需要定义是只需要重排误差线(或其他一些动态对象)还是所有小部件。我个人通过定义bool needFullRepaint
来实现这一点,该在每次渲染刻度后设置为由小部件false
,并在小部件中的某些数据更改后设置为true
。
这是一种低级方法,需要高水平的技能和一些时间,但您将获得对渲染和与小部件交互的最大控制权,这并不总是可以通过QGraphicsScene
或QCharts
- 对于以前没有使用过Qt的人来说,这将是一个相当复杂的项目。
- 你会希望使用QGraphicsScene,而不是QPainter的例子。对于交互式示例,QGraphicsScenes比QPainter容易得多。
- 使用QCharts作为起点,他们有关于如何绘制数据然后移动项目的示例。特别是查看标注示例,该示例让您绘制一个标注,标记光标在图形上的位置。
- 看看Qt的"拖放机器人"示例。
所有这些都是实现可拖动特征以创建交互式绘图的绝佳起点。Qt使广义变得容易:然而,对于许多绘图功能(至少在QtCharts之前),Qt比专门的绘图库要困难得多。
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 如何在鼠标挂钩过程中检测拖动
- 如何通过拖动鼠标QT检查按钮?鼠标移动事件
- 如何防止特定的QTreeView分支被拖动?
- 通过拖动边框调整大小时不显示SDL_WINDOWEVENT_SIZE_CHANGED?
- 在 qt 中的绘图中拖动误差线
- 非拖动功能模板参数包的合法使用
- QML在被Mousearea拖动时无法更改项目位置
- 在OpenGL中,如何将鼠标跟随更改为鼠标单击,拖动并移动释放?
- 如何在 Win32 应用中拖动纯色矩形,而不会产生白色闪烁,也不会干扰其他屏幕对象
- 图形项目的QgraphicsScene中的可拖动像素
- Qt - 防止在拖动标题栏时调整窗口大小
- 在内部使用ComboBox拖动ListWidget项目
- 使用C 绘制矩形拖动
- 在 QGraphicsScene 中拖动 QPixmap:如何避免 lambda 参数中不允许'auto'
- 如何在QT中拖动未装饰的窗口
- 有没有办法在Qt中以编程方式中断鼠标拖动
- Qt - 拖动移动 q图形项不能很好地工作
- 使用C 中的WXWIDGET使用可拖动矩形从图像中选择区域
- 如何跟踪拖动/下降操作的寿命