`
jimmykuu
  • 浏览: 36955 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

QGraphicsView中选中QGraphicsPathItem使之不出现虚线框

    博客分类:
  • PyQt
Qt 
阅读更多

绘制一条贝赛尔曲线,当选中该曲线时,显示其控制点并把控制点和起始点连结起来,从而可以清晰的显示曲线的参数。

 

# -*- 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
0
0
分享到:
评论

相关推荐

    QGraphicsView框架实现画板

    在IT领域,尤其是在GUI应用程序开发中,`QGraphicsView`框架是Qt库中的一个重要组成部分,它为创建复杂的、可交互的2D图形视图提供了强大的支持。本篇将深入探讨`QGraphicsView`框架实现画板的相关知识点,以及如何...

    QT QGraphicsview实现的简单地图

    在本文中,我们将深入探讨如何使用QT库中的QGraphicsView组件来实现一个简单的地图应用。QGraphicsView是QT框架中的一个重要部分,它提供了一个可扩展的2D图形视图,适用于构建各种图形用户界面,包括地图展示。 ...

    QGraphicsView框架容易忽视的坐标问题-“画布”QgraphicsScene到底放在了哪儿?

    在实际编程中,开发者可能会遇到这样一个问题:当在QGraphicsScene上添加了一个对象,并设置了其坐标,但在QGraphicsView中却看不到。这可能是由于对象的位置超出了当前视口的范围,或者是由于缩放和平移设置不当...

    Qt QGraphicsView 控件实现标尺和刻度先效果

    在这个特定的案例中,我们关注的是如何利用QGraphicsView来实现自定义的标尺和刻度线效果,而不需要额外引入其他控件。下面我们将详细探讨这一实现过程。 首先,我们要理解`paintEvent(QPaintEvent *event)`方法。...

    QGraphicsView以鼠标点实现放大缩小、拖拽

    在Qt框架中,`QGraphicsView`是一个强大的组件,用于显示和操作复杂的2D图形场景。本篇文章将详细讲解如何利用`QGraphicsView`来实现图像的放大、缩小和拖拽功能,这对于创建具有交互性的图形用户界面(GUI)特别...

    QT中QGraphicsView窗口滑动

    在QT编程中,QGraphicsView是一个非常重要的组件,它提供了对2D图形场景的高级视图操作,包括缩放、平移和旋转等。当我们想要实现窗口滑动,特别是针对手机模式下的用户界面,QGraphicsView是理想的选择。这篇内容将...

    qgraphicsview

    QGraphicsView是Qt库中的一个关键组件,用于在图形视图框架中显示和操作复杂的2D图形场景。这个框架允许开发者以高效的方式处理大量图形对象,包括自定义形状、图像和文本。在“qgraphicsview”这个主题中,我们将...

    QGraphicsView(平移/缩放/旋转)

    在Qt5框架中,`QGraphicsView`是一个强大的视图组件,用于显示和操作复杂的图形场景,如`QGraphicsScene`。本项目旨在实现一个类似于图片浏览器的应用,它集成了平移、缩放和旋转等基本操作。让我们深入探讨一下`...

    【Pyside资源】 基于 QGraphicsView、PySide6 实现可拖拽的矩形 demo 案例

    基于QGraphicsView和PySide6实现的可拖拽矩形demo案例是一个演示如何在图形视图中创建、操作和交互的基本示例。 这个demo将展示如何使用PySide6的图形视图框架来创建一个用户界面,用户可以在其中创建矩形对象,并...

    如何使QGraphicsItem不随QGraphicsView放大缩小而改变大小

    在使用QGraphicsView过程中,有时候我们需要对view进行缩放,但是对于一般正常的加入view中的item都会随着view的大小变化而变化,但是如果我们想让某些item不随view的缩放进行改变怎么办呢?详情见博客:...

    Qt使用QGraphicsView实现滑动窗体效果

    QGraphicsView用来显示一个滚动视图区的QGraphicsScene内容。QGraphicsScene提供了QGraphicsItem的容器功能。...以下是一个QGraphicsView的例子,实现滑动的窗体效果,工具栏和图片均为场景中的Item。

    QGraphicsView截图.zip

    在QT编程环境中,`QGraphicsView` 是一个强大的组件,用于显示和操作复杂的图形界面。在给定的“QGraphicsView截图.zip”压缩包中,我们可能会发现一个示例项目,该项目演示了如何利用`QGraphicsView`来实现截图功能...

    基于QGraphicsView实现的画图软件

    QGraphicsView是QT库中的一个关键组件,它为2D图形渲染和交互提供了强大的支持,使开发者能够创建出具有复杂图形用户界面(GUI)的应用程序。 首先,QGraphicsView是QT中的一个视图类,它与QGraphicsScene配合工作...

    Qt下QGraphicsView框选

    默认情况下,QGraphicsView并不支持框选,我们需要通过`setDragMode()`函数来开启选择模式。有两种主要的选择模式:`ScrollHandDrag`(滚动模式)和`RubberBandDrag`(橡皮筋选择模式,即框选模式)。为了实现框选,...

    QGraphicsview 显示图片,鼠标框选获取图片选区,OpenCV 显示ROI矩形选区。

    应用QT QGraphicsview 显示图片,并加入了鼠标事件获取图片像素坐标,利用鼠标绘制矩形框选图片选区,选择的选区显示在Lable控件上。得到图片像素坐标以后,并利用OpenCV截取图片的的选区,显示在Qlable控件上面。本...

    qt例程QGraphicsview_test.7z

    同时,QGraphicsView的drawForeground和drawBackground方法可以用来在场景之上或之下绘制额外的内容。 8. **动画**:QGraphicsView与QGraphicsObject结合使用,可以轻松实现图形对象的动画效果。QPropertyAnimation...

    QGraphicsView.zip

    在Qt库中,`QGraphicsView`是一个非常重要的组件,用于显示和操作复杂的2D图形场景。这个压缩包“QGraphicsView.zip”包含了几个源代码文件,如`interactive_view.cpp`、`pixitem.cpp`、`pixitem.h`、`interactive_...

    QGraphicsView类的简单用法

    QT框架中的QGraphicsView类是Qt图形视图框架的核心组件之一,它允许开发者在窗口中显示复杂的二维图形和场景。这个类提供了丰富的功能,如缩放、平移、旋转等,使得开发图形用户界面变得更加灵活和高效。在这个简单...

    实现qt QGraphicsView放大缩小功能的类

    在Qt框架中,`QGraphicsView`是一个非常重要的部件,用于显示`QGraphicsScene`中的图形元素,并提供了丰富的交互功能,如平移、缩放等。在这个特定的案例中,我们关注的是如何实现`QGraphicsView`的放大和缩小功能,...

    QGraphicsView QGraphics 窗口自适应

    绘制或导入的QGraphicsItem可能会很大或很小,我们想要根据现实窗口的大小自适应显示item,基于个人对QGraphics Scene、Graphics Item、Graphics View关系[^1]的理解,发现一种方法使用可以解决需求。

Global site tag (gtag.js) - Google Analytics