绘制一条贝赛尔曲线,当选中该曲线时,显示其控制点并把控制点和起始点连结起来,从而可以清晰的显示曲线的参数。
# -*- 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
分享到:
相关推荐
在IT领域,尤其是在GUI应用程序开发中,`QGraphicsView`框架是Qt库中的一个重要组成部分,它为创建复杂的、可交互的2D图形视图提供了强大的支持。本篇将深入探讨`QGraphicsView`框架实现画板的相关知识点,以及如何...
在这个特定的案例中,我们关注的是如何利用QGraphicsView来实现自定义的标尺和刻度线效果,而不需要额外引入其他控件。下面我们将详细探讨这一实现过程。 首先,我们要理解`paintEvent(QPaintEvent *event)`方法。...
在实际编程中,开发者可能会遇到这样一个问题:当在QGraphicsScene上添加了一个对象,并设置了其坐标,但在QGraphicsView中却看不到。这可能是由于对象的位置超出了当前视口的范围,或者是由于缩放和平移设置不当...
在本文中,我们将深入探讨如何使用QT库中的QGraphicsView组件来实现一个简单的地图应用。QGraphicsView是QT框架中的一个重要部分,它提供了一个可扩展的2D图形视图,适用于构建各种图形用户界面,包括地图展示。 ...
在Qt框架中,`QGraphicsView`是一个强大的组件,用于显示和操作复杂的2D图形场景。本篇文章将详细讲解如何利用`QGraphicsView`来实现图像的放大、缩小和拖拽功能,这对于创建具有交互性的图形用户界面(GUI)特别...
在QT编程中,QGraphicsView是一个非常重要的组件,它提供了对2D图形场景的高级视图操作,包括缩放、平移和旋转等。当我们想要实现窗口滑动,特别是针对手机模式下的用户界面,QGraphicsView是理想的选择。这篇内容将...
QGraphicsView是Qt库中的一个关键组件,用于在图形视图框架中显示和操作复杂的2D图形场景。这个框架允许开发者以高效的方式处理大量图形对象,包括自定义形状、图像和文本。在“qgraphicsview”这个主题中,我们将...
在Qt5框架中,`QGraphicsView`是一个强大的视图组件,用于显示和操作复杂的图形场景,如`QGraphicsScene`。本项目旨在实现一个类似于图片浏览器的应用,它集成了平移、缩放和旋转等基本操作。让我们深入探讨一下`...
基于QGraphicsView和PySide6实现的可拖拽矩形demo案例是一个演示如何在图形视图中创建、操作和交互的基本示例。 这个demo将展示如何使用PySide6的图形视图框架来创建一个用户界面,用户可以在其中创建矩形对象,并...
QGraphicsView用来显示一个滚动视图区的QGraphicsScene内容。QGraphicsScene提供了QGraphicsItem的容器功能。...以下是一个QGraphicsView的例子,实现滑动的窗体效果,工具栏和图片均为场景中的Item。
在使用QGraphicsView过程中,有时候我们需要对view进行缩放,但是对于一般正常的加入view中的item都会随着view的大小变化而变化,但是如果我们想让某些item不随view的缩放进行改变怎么办呢?详情见博客:...
在QT编程环境中,`QGraphicsView` 是一个强大的组件,用于显示和操作复杂的图形界面。在给定的“QGraphicsView截图.zip”压缩包中,我们可能会发现一个示例项目,该项目演示了如何利用`QGraphicsView`来实现截图功能...
QGraphicsView是QT库中的一个关键组件,它为2D图形渲染和交互提供了强大的支持,使开发者能够创建出具有复杂图形用户界面(GUI)的应用程序。 首先,QGraphicsView是QT中的一个视图类,它与QGraphicsScene配合工作...
默认情况下,QGraphicsView并不支持框选,我们需要通过`setDragMode()`函数来开启选择模式。有两种主要的选择模式:`ScrollHandDrag`(滚动模式)和`RubberBandDrag`(橡皮筋选择模式,即框选模式)。为了实现框选,...
应用QT QGraphicsview 显示图片,并加入了鼠标事件获取图片像素坐标,利用鼠标绘制矩形框选图片选区,选择的选区显示在Lable控件上。得到图片像素坐标以后,并利用OpenCV截取图片的的选区,显示在Qlable控件上面。本...
同时,QGraphicsView的drawForeground和drawBackground方法可以用来在场景之上或之下绘制额外的内容。 8. **动画**:QGraphicsView与QGraphicsObject结合使用,可以轻松实现图形对象的动画效果。QPropertyAnimation...
在Qt库中,`QGraphicsView`是一个非常重要的组件,用于显示和操作复杂的2D图形场景。这个压缩包“QGraphicsView.zip”包含了几个源代码文件,如`interactive_view.cpp`、`pixitem.cpp`、`pixitem.h`、`interactive_...
QT框架中的QGraphicsView类是Qt图形视图框架的核心组件之一,它允许开发者在窗口中显示复杂的二维图形和场景。这个类提供了丰富的功能,如缩放、平移、旋转等,使得开发图形用户界面变得更加灵活和高效。在这个简单...
在Qt框架中,`QGraphicsView`是一个非常重要的部件,用于显示`QGraphicsScene`中的图形元素,并提供了丰富的交互功能,如平移、缩放等。在这个特定的案例中,我们关注的是如何实现`QGraphicsView`的放大和缩小功能,...
在Qt框架中,`QGraphicsView`是用于创建复杂图形用户界面的重要组件,它与`QGraphicsScene`和`QGraphicsItem`一起构成了强大的2D绘图系统。这个系统允许开发者实现灵活的图形操作,如缩放、移动和旋转,为用户提供了...