在Qcanvas上拖动一个点



我只是想知道,是否可以在QCanvas上拖动点。例如,我想在画布上绘制随机点,我希望每个点都可以在画布上的任何地方拖动。

我刚刚进入pyqt,尽管我已经使用wxPython和WPF进行了一些基于画布的GUI开发,所以我可以为您提供pyqt的总体方法,但不能提供详细信息。

你应该能够

  • 捕获画布的鼠标左键单击事件
  • 找到最接近它的点
  • 更改光标,以便用户知道他们已经"获取"了该点
  • 然后移动点作为鼠标移动信号处理程序,最后
  • 在鼠标释放信号处理程序中,"放下"点(更改其坐标并将光标更改回法线)

当鼠标悬停在某个点附近时,您可能应该通过在该点周围画一个圆圈来指示可以抓取该点;然后当你拖动点的时候,你实际上拖动了中间有点的圆,所以很容易看到点在哪里。

您可能还应该对按下ESC键做出响应:如果用户在移动过程中按下ESC键,则该点将返回到开始位置,操作将中止。

对于pyqt,请参阅PyQt4中如何使用动画绘制线条:它在从QWidget派生的类中使用QPainter,这似乎是常见的模式,但也有QGraphicsView,它可能提供更高级别的API。QCanvas类似乎非常古老,并且似乎需要QCanvasView,您的代码可以从中捕获鼠标事件。