zoukankan      html  css  js  c++  java
  • 图形项类

    1. 图形项

    创建具体的图形项需要具体对应的类,例如创建矩形使用QGraphicsRectItem,创建椭圆和圆使用QGraphicsEllipseItem,创建三角形和梯形使用QGraphicsPolygonItem,创建直线使用QGraphicsLineItem,创建文字使用QGraphicsTextItem。这些图形项都是QGraphicsItem类的直接或间接子类。QGraphicsItem类没有pen、brush、font属性,在具体的子类里才有这些属性,所以组件的属性设置有如下差异。

      QAbstractGraphicsShapeItem类有pen和brush属性,所以其子类可以通过设置brush属性设置填充颜色。在程序中,矩形、椭圆、三角形、梯形等都设置了填充颜色。

      QGraphicsLineItem只有pen属性,可以设置线条的颜色、线宽、线型等特性。

      QGraphicsTextItem有font属性,可以设置字体,还可以通过setDefaultTextColor()函数设置文字的颜色。

    2. 图形项的属性设置

    setFlag(flag, enabled=True)函数,设置图形项的一些特性,参数flag是枚举类型QGraphicsItem.GraphicsItemFlag,其具体取值和意义见Qt的帮助文档。程序中将图形项都设置为可以获得焦点、可移动、可选择的。

    setZValue(Z)函数,设置图形项的Z值,参数Z是一个浮点数。这个参数控制叠放顺序,当有多个图形项叠加在一起时,Z值最大的显示在最前面。

    setPos(x, y)函数,设置图形项的位置,如果图形项有父容器项,坐标(x, y)是父容器的坐标,否则就是图形场景的坐标。

    setData(key, value)函数,用于设置图形项的自定义数据,整数型参数key是数据名称,value是具体的数据内容,可以是任意类型。key和value是一个键值对,使用setData()一次可以设置一个键值对,可以为一个图形项设置多个自定义键值对。程序里设置了两个自定义数据:

      item.setData(self.__ItemId, self._seqNum)  # 图形项的编号

      item.setData(self.__ItemDesc, desc)  # 图形项的描述

    self.__ItemId是图形项的编号,其取值self._seqNum是一个递增变量,self.__ItemDesc是图形项的描述。这样,每个图形项有一个唯一的编号和文字描述。在窗口上单击某个图形项时,会提取这两个自定义数据显示在状态栏上。

    3. 图形项操作

    3.1 缩放

    图形项的缩放使用QGraphicsItem.setScale(scale)参数,参数scale大于1是放大,小于1是缩小。

    QGraphicsScene类的selectedItems()函数返回场景中选中的图形项的列表,如果只有一个图形项被选中,就用QGraphicsItem()中的setScale()函数对图形项进行缩放。如果选中的图形项个数大于1,或没有图形项被选中,就用QGraphicsView的scale()函数对视图进行缩放。

    3.2 旋转

    图形项的旋转使用QGraphicsItem.setRotation(angle)函数,参数angle为角度值,正值表示顺时针旋转,负值表示逆时针旋转。

     3.3 恢复坐标变换

    缩放和旋转都是坐标变换,可以取消所有变换恢复初始状态。

    3.4 叠放顺序

    QGraphicsItem的zValue()函数值表示了图形项的叠放顺序,若有多个图形项叠加在一起,zValue()值最大的显示在最前面,zValue()值最小的显示在最后面。用setZValue()函数可以设置这个属性值。

    3.5 图形项的组合

    可以将多个图形项组合为一个图形项,并将其当作一个整体进行操作,如同PowerPoint软件里图形组合功能一样。使用QGraphicsItemGroup类实现多个图形项的组合,QGraphicsItemGroup是QGraphicsItem的资料,所以,实质上也是一个图形项。

    3.6 图形项的删除

    使用QGraphicsScene的removeItem()函数删除某个图形项。

  • 相关阅读:
    【POJ 1958】 Strange Towers of Hanoi
    【HNOI 2003】 激光炸弹
    【POJ 3263】 Tallest Cow
    【POJ 2689】 Prime Distance
    【POJ 2777】 Count Color
    【POJ 1995】 Raising Modulo Numbers
    【POJ 1845】 Sumdiv
    6月16日省中集训题解
    【TJOI 2018】数学计算
    【POJ 1275】 Cashier Employment
  • 原文地址:https://www.cnblogs.com/lynsha/p/13508376.html
Copyright © 2011-2022 走看看