在Qcanvas上拖动一个点

时间:2014-02-16 17:34:04

标签: qt4 pyqt

我只是想知道,是否有可能在QCanvas上拖点。我想在画布上绘制随机点,例如,我希望每个点都可以在画布中随处可拖动。

1 个答案:

答案 0 :(得分:0)

我刚刚进入pyqt虽然我已经使用wxPython和WPF做了一些基于画布的GUI开发,所以我可以给你整体方法但不是pyqt的细节。

你应该能够

  • 捕获画布的鼠标左键单击事件,
  • 找到最接近它的点,
  • 更改光标,以便用户知道他们已经“占据”了这一点,
  • 然后将点移动为鼠标移动信号处理程序,最后
  • 在鼠标释放信号处理程序中,“删除” point(更改其坐标并将光标更改回正常状态)。

你可能应该指出,当鼠标在一个点附近盘旋时,可以通过在该点周围画一个圆圈来抓住一个点;然后当你拖动这个点时,你实际上用中间的点拖动那个圆圈,这样很容易看到点在哪里。

您也应该按ESC键按下:如果用户在移动过程中按下ESC,该点将返回到它开始的位置并且操作被中止。

对于pyqt,请看How to draw a line with animation in PyQt4:它在从QWidget派生的类中使用QPainter,这似乎是常见模式,但也有QGraphicsView可以提供更高级别的API。 QCanvas类似乎很老,似乎需要QCanvasView,您的代码可以从中捕获鼠标事件。