c++ - 在 qt 中的绘图中拖动误差条

标签 c++ qt qt5 qpainter

我在使用 C++ 的 Qt 5.9 中使用 QPainter 绘制绘图并根据鼠标事件更新它。

我想知道如何绘制这样的错误栏:

-
|
-

当然,垂直线和水平线之间不应该有间隙。

我需要能够在绘图上四处拖动误差条,并在释放鼠标按钮时获得误差条中心位置的坐标。到目前为止,我已经制作了一个带有轴和标签的图。不确定如何使用 QPainter 或任何其他 Qt 库类获取错误栏。

请提供一些关于如何制作/绘制误差条的见解。在 QPainter 中有一种简单的方法可以做到这一点吗?

最佳答案

如果您使用 QPainter,您应该自己实现拖放。如果您的地 block 上没有太多对象,这并不难。

基本思路是:

首先渲染所有对象。比您需要在绘图小部件中重新实现 mousePressEventmouseMoveEvent。在 mousePressEvent 中,您应该检查是否单击了可拖动对象并将该对象定义为当前正在拖动。在 mouseMoveEvent 中,只需通过更改其坐标并重新渲染图来移动该对象(如果有的话)。

您可能希望优化绘图以避免在每次鼠标移动时重新渲染完整绘图。这可以通过将很少变化的对象绘制到 QPixmap/QImage 来实现,而不是在小部件上渲染这个 QPixmap/QImage 并且绘制错误栏和所有其他类型的对象,这些对象可能会在每次鼠标移动时在这个像素图上打勾。在每次重新绘制时,您都需要定义是否需要重新绘制错误栏(或其他一些动态对象)或所有小部件。我个人通过定义 bool needFullRepaint 来实现这一点,它在每次渲染滴答后由小部件设置为 false,并在小部件内部的某些数据更改后设置为 true

这是一种低级方法,需要高水平的技能和一些时间,但您将获得对渲染和与小部件交互的最大控制权,这在 QGraphicsSceneQCharts

关于c++ - 在 qt 中的绘图中拖动误差条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44835190/

相关文章:

c++ - Qt Creator 没有 Qt 应用程序的选项

c++ - QT SQLite select 不返回任何数据

c++ - 如何使用Qt编程获得圆柱效果(2D)进度条?

c++ - QWebSocket "Unknown Error"

c++ - 对有限数量的命令进行快速语音识别

c++ - C++ 文件读写

c++ - 如何在 linux asm 中正确地返回一个 double

c++ - 复制包含原子成员的对象的地址?

c++ - 使用线程编程

c++ - 如何使用 Qt 减少小部件和窗口大小之间的距离?