QGraphicsView中选中QGraphicsPathItem使之不出现虚线框
绘制一条贝赛尔曲线,当选中该曲线时,显示其控制点并把控制点和起始点连结起来,从而可以清晰的显示曲线的参数。
# -*- 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
这是就能达到要求了。

QGraphicsView中选中QGraphicsPathItem使之不出现虚线框的更多相关文章
- 在MonthCalendar控件中选中日期
		Calendar.MONTH Calendar now=Calendar.getInstance();System.out.print(now.get(Calendar.MONTH));得到的月份少1 ... 
- Eclipse和Android Studio中的DDMS使用时什么不同?
		http://www.jb51.net/softjc/454131.html Eclipse和Android Studio中的DDMS使用时什么不同? 相信很多经常开发Android应用的朋友应该都接 ... 
- 在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法
		在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法 ==========方法1: --------1. 选相应 ... 
- 下拉框——把一个select框中选中内容移到另一个select框中遇到的问题
		在使用jQuery实现把一个select框中选中内容移到另一个select框中功能时遇到了一个问题,就是点击按钮时内容可以到另一个select框中,但是到了另一个select框中的内容却很快闪退回原来 ... 
- .net中不能在DropDownList中选中多个项的解决方法
		页面中放有多个DropDownList,点击修改时候,需要根据值来设置两个DropDownList的选中项,当值为空时则需要选中默认值. 页面报错:不能在DropDownList中选中多个项. 直接粘 ... 
- winform代码:关联窗体数据更新,删除dataGridview中选中的一行或多行
		一.关联窗体数据更新 关联窗体数据修改时,如果一个为总体数据显示窗体A,另一个为详细修改窗体B,从A进入B,在B中对数据进行修改,然后返回A,这时A窗体的数据需要更新. 我采用最简单的方法,首先保证每 ... 
- 如何在SourceInsight中选中匹配的大括号中的内容
		如何在SourceInsight中选中匹配的大括号中的内容 要分析的代码很长,多个for,if等分析嵌套在一起,代码有点乱,找到了这个分支的头,却不知道尾在哪,找到了尾却不知道哪是开头,在网上找了一下 ... 
- LaTeX 中插入图片使其紧跟插入的文字之后
		LaTeX 中插入图片使其不跑到每页的开头而紧跟插入的文字之后. 此次建模过程中,遇到的一个比较棘手的问题是: 当插入图片时,图片的位置总是会自动跑到当页(或下一页)的最上方,而不是紧跟在其对应的说明 ... 
- 继续聊WPF——如何获取ListView中选中的项
		在WPF中获Listview中选中的项,与WinForm里面有着很大的区别,要亲身去研究一下在WPF中如果处理,其实也不难,来,下面我们一起来通过一个简单的示例来感悟一下吧. 第一步就是建立一个WPF ... 
随机推荐
- 向ibus-table-wubi里添加属于自己的输入法(98五笔)
			写在前面: 第三步整理每行的结构相对来说算是最难的,我的方法是先用文本编码转换专家将文本编码转换成utf-8无BOM(linux下有转换命令不会用,一定要是无BOM否则会在linux下打开乱码),再用 ... 
- [转] IOS中AppDelegate中的生命周期事件的调用条件
			IOS中AppDelegate中的生命周期事件的调用条件 //当应用程序将要进入非活动状态执行,在此期间,应用程序不接受消息或事件,比如来电 - (void)applicationWillResign ... 
- wordpress 首页模板变量对应表
			最近开始学习wp,这里做一些笔记. 首页模板,第一行为前台显示的html代码.第二行为 wp-content/themes/模板目录 下 head.php文件中. 其中我将变量名 html用绿色标记 ... 
- C++模板:Dijkstra+优先队列
			#include <cstdio> #include <cstring> #include <queue> #include <utility> usi ... 
- maven 添加自己的包
			mvn install:install-file -Dfile=d:/flea.jar -DgroupId=com.flea.bussiness -DartifactId=flea -Dversion ... 
- File,FileInputStream,FileReader,InputStreamReader,BufferedReader 的使用和区别
			1 ) File 类介绍 File 类封装了对用户机器的文件系统进行操作的功能.例如,可以用 File 类获得文件上次修改的时间移动, 或者对文件进行删除.重命名.换句话说,流类关注的是文件内容,而 ... 
- javascript中处理引号编码"
			1. <c:out value='${jxOrgJsonStr}' escapeXml="false"/> 2.或者使用innerText 直接接受${jxOrgJso ... 
- Objective-c中@interface、@implementation、@protocal
			以下 void print(); }; class AC{ }; 这时候,AI和AC是独立存在,AC不会因为没有和AI建立关系而编译错误,将AC做以下修改后,AI才和AC建立了关系,AC必须实现AI中 ... 
- Android JNI入门第五篇——基本数据类型使用
			前面讲到了java和native数据类型,这里就开始做一下使用: 第一步:新建工程 第二部:书写 java方法: public class NativeMethod { static { System ... 
- 邮件发送 emailsend .net开发
			protected void Button1_Click(object sender, EventArgs e) { MailSender.Send("lizihong3@163.com&q ... 
