绘制一条贝赛尔曲线,当选中该曲线时,显示其控制点并把控制点和起始点连结起来,从而可以清晰的显示曲线的参数。
# -*- coding: utf-8 -*-
from PyQt4 import QtGui, QtCore
class PathItem(QtGui.QGraphicsPathItem):
def __init__(self, parent=None, scene=None):
QtGui.QGraphicsPathItem.__init__(self, parent=parent, scene=scene)
self.setFlag(QtGui.QGraphicsItem.ItemIsSelectable)
self.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
path = QtGui.QPainterPath()
self.start_x, self.start_y = 20, 30
self.end_x, self.end_y = 80, 80
self.ctrl1_x, self.ctrl1_y = 80, 0
self.ctrl2_x, self.ctrl2_y = 50, 50
path.moveTo(self.start_x, self.start_y)
path.cubicTo(self.ctrl1_x, self.ctrl1_y, self.ctrl2_x, self.ctrl2_y, self.end_x, self.end_y)
self.setPath(path)
def paint(self, painter, options, widget):
if self.isSelected():
painter.drawEllipse(self.ctrl1_x - 3, self.ctrl1_y - 3, 6, 6)
painter.drawLine(self.start_x, self.start_y, self.ctrl1_x, self.ctrl1_y)
painter.drawEllipse(self.ctrl2_x - 3, self.ctrl2_y - 3, 6, 6)
painter.drawLine(self.end_x, self.end_y, self.ctrl2_x, self.ctrl2_y)
# 1
QtGui.QGraphicsPathItem.paint(self, painter, options, widget)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
view = QtGui.QGraphicsView()
scene = QtGui.QGraphicsScene(view)
view.setRenderHint(QtGui.QPainter.Antialiasing)
view.setScene(scene)
pathItem = PathItem(scene=scene)
view.show()
sys.exit(app.exec_())
效果如下所示:
现在的问题就是当选中状态时,会自动出现一个虚线框,而显示控制点和连接线就已经表示了选中状态,翻看了文档并没有发现有任何说明可以取消该虚线框,通过翻看Qt源代码,发现绘制虚线框是通过paint方法中options参数来控制的,因此只需改变options参数即可,在# 1处增加一行代码:
options.state = QtGui.QStyle.State_None
这是就能达到要求了。
- 大小: 11.2 KB
- 大小: 10.7 KB
分享到:
相关推荐
在使用QGraphicsView过程中,有时候我们需要对view进行缩放,但是对于一般正常的加入view中的item都会随着view的大小变化而变化,但是如果我们想让某些item不随view的缩放进行改变怎么办呢?详情见博客:...
应用QT QGraphicsview 显示图片,并加入了鼠标事件获取图片像素坐标,利用鼠标绘制矩形框选图片选区,选择的选区显示在Lable控件上。得到图片像素坐标以后,并利用OpenCV截取图片的的选区,显示在Qlable控件上面。本...
QGraphicsView用来显示一个滚动视图区的QGraphicsScene内容。QGraphicsScene提供了QGraphicsItem的容器功能。...以下是一个QGraphicsView的例子,实现滑动的窗体效果,工具栏和图片均为场景中的Item。
借用QT中的QGraphicsView类实现窗口滑动
qgraphicsview封装成表格的形式,根据row 和column 来设置控件的位置
画图软件,基于QGraphicsView实现,可画直线,矩形,椭圆,圆角矩形,不规则多边形,曲线等等基本功能,并且可编辑这些图形,代码封装完毕,可简单移植到项目中使用。
qt5工程,实现类似于图片浏览器功能,QGraphicsView(平移/缩放/旋转);参考某大神的做法;
绘制或导入的QGraphicsItem可能会很大或很小,我们想要根据现实窗口的大小自适应显示item,基于个人对QGraphics Scene、Graphics Item、Graphics View关系[^1]的理解,发现一种方法使用可以解决需求。
环境:VS2017+Qt5.14.2 环境匹配可以运行成功 功能: 1:实现了基本的图形:矩形、正方形、圆形、三角形、多线段、曲线的绘制 2:鼠标实时绘制图形。鼠标按下后开始绘制,再次按下后停止绘制。 ...
QGraphicsView框架容易忽视的坐标问题-“画布”QgraphicsScene到底放在了哪儿?
在QGraphicsView架构下框选场景中的元素(shift+鼠标左键)(Ctrl+鼠标左键)进行框选
QGraphicsView的UML关系图
QGraphicsView 支持拖拽缩放
使用 QGraphicsView、QGraphicsScene、QGraphicsItem进行简单的缩放,移动,旋转
将SVG矢量图显示在Qt的QGraphicsView视图框架上,具有通过QDomDocument、QDomElement、QDomNode、QDomNameNodeMap等对象来解析svg并修改svg来实现矢量图的部分内容缩放,部分内容不缩放的功能。
重写QGraphicsView,实现缩放,平移功能,平移时会同步QGraphicsView滚动条位置,这样不会导致移动以后和QGraphicsView的滚动条不匹配。
QGraphicsView.7z
QGraphicsView画折线图Qt计算线段交点QGraphicsItem得简单使用
qt例程QGraphicsview_test.7z
实现qt QGraphicsView放大缩小功能的类,不用继承QGraphicsView,只需要在该类中设置要实现放大缩小的QGraphicsView对象即可。