在qt中的绘图中拖动错误栏 我在QT 5.9中使用QPrice,用C++编写一个情节并根据鼠标事件更新它。

在qt中的绘图中拖动错误栏 我在QT 5.9中使用QPrice,用C++编写一个情节并根据鼠标事件更新它。,c++,qt,qt5,qpainter,C++,Qt,Qt5,Qpainter,我想知道如何绘制类似以下内容的错误条: - | - 当然,垂直线和水平线之间不应该有间隙 我需要能够在绘图上拖动错误条,并在释放鼠标按钮时获得错误条中心位置的坐标。到目前为止,我已经用轴和标签绘制了一个图。不确定如何使用QPaint或任何其他Qt库类获取错误栏 请提供一些关于如何制作/绘制错误条的见解。在QPainter中有没有一种简单的方法可以做到这一点 对于以前没有使用过Qt的人来说,这将是一个相当复杂的项目 您将希望在所有可能性中使用,而不是QPainter示例。对于交互式示例,Qgra

我想知道如何绘制类似以下内容的错误条:

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

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

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

  • 对于以前没有使用过Qt的人来说,这将是一个相当复杂的项目
  • 您将希望在所有可能性中使用,而不是QPainter示例。对于交互式示例,Qgraphicscene比QPainter简单得多
  • 以QCharts为起点,他们提供了如何绘制数据并移动项目的示例。请特别查看该示例,其中绘制了一个标注,用于标记光标在图形上的位置
  • 请看Qt中的示例

  • 所有这些都是如何实现可拖动功能以创建交互式绘图的极好起点。Qt使一般意义上的绘图变得容易:然而,对于许多绘图功能(至少在QtCharts之前),Qt比专门的绘图库困难得多。

    如果您使用QPaint,您应该自己实现拖放功能。如果你的绘图上没有太多的对象,这并不难

    基本思路如下:

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

    您可能希望优化打印,以避免在每次鼠标移动时重新渲染完整的打印。这可以通过以下方式实现:绘制很少更改的对象到
    QPixmap
    /
    QImage
    ,在小部件上呈现此
    QPixmap
    /
    QImage
    ,绘制错误条和在每次鼠标移动勾选此pixmap时可能更改的所有其他类型的对象。在每次重新绘制时,您需要定义是否只需要重新绘制错误条(或其他一些动态对象)或所有小部件。我个人通过定义
    bool needFullRepaint
    来实现这一点,在每次渲染勾选后,小部件将其设置为
    false
    ,在小部件中的某些数据更改后,将其设置为
    true


    这是一种低级的方法,它需要高水平的技能和花费一些时间,但您将获得对呈现和与小部件交互的最大控制权,这在
    qgraphicscene
    QCharts

    中并不总是可能实现,谢谢您的帮助。我已经使用QPaint运行了绘图。转移到QChart会有太多额外的努力。我想有办法,但我可能无法把它拖来拖去。请告诉我您是否可以想出一种方法,使用QPaint通过鼠标单击拖动一个点。您可以,但这将意味着存储状态并重新实现
    paintEvent()
    ,然后根据存储的数据有条件地绘制项目。这是非常可行的,只是需要做更多的工作。我可以给你一些小部件的例子,谢谢。所以我现在确实有了这样的结构,并且基本的活动都在进行中。我只是不知道如何制作误差条。我一直在努力工作,但一直没能做好。你到底能做什么?使用QPaint::drawLine作为最简单的方法来渲染问题中的图形,以生成错误条。所有的线路都乱了。