我在使用 C++ 的 Qt 5.9 中使用 QPainter 绘制绘图并根据鼠标事件更新它。
我想知道如何绘制这样的错误栏:
-
|
-
当然,垂直线和水平线之间不应该有间隙。
我需要能够在绘图上四处拖动误差条,并在释放鼠标按钮时获得误差条中心位置的坐标。到目前为止,我已经制作了一个带有轴和标签的图。不确定如何使用 QPainter 或任何其他 Qt 库类获取错误栏。
请提供一些关于如何制作/绘制误差条的见解。在 QPainter 中有一种简单的方法可以做到这一点吗?
最佳答案
如果您使用 QPainter,您应该自己实现拖放。如果您的地 block 上没有太多对象,这并不难。
基本思路是:
首先渲染所有对象。比您需要在绘图小部件中重新实现 mousePressEvent
和 mouseMoveEvent
。在 mousePressEvent
中,您应该检查是否单击了可拖动对象并将该对象定义为当前正在拖动。在 mouseMoveEvent
中,只需通过更改其坐标并重新渲染图来移动该对象(如果有的话)。
您可能希望优化绘图以避免在每次鼠标移动时重新渲染完整绘图。这可以通过将很少变化的对象绘制到 QPixmap
/QImage
来实现,而不是在小部件上渲染这个 QPixmap
/QImage
并且绘制错误栏和所有其他类型的对象,这些对象可能会在每次鼠标移动时在这个像素图上打勾。在每次重新绘制时,您都需要定义是否需要重新绘制错误栏(或其他一些动态对象)或所有小部件。我个人通过定义 bool needFullRepaint
来实现这一点,它在每次渲染滴答后由小部件设置为 false
,并在小部件内部的某些数据更改后设置为 true
。
这是一种低级方法,需要高水平的技能和一些时间,但您将获得对渲染和与小部件交互的最大控制权,这在 QGraphicsScene
或QCharts
关于c++ - 在 qt 中的绘图中拖动误差条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44835190/