예제 #1
0
    def on_actItem_Text_triggered(self):  # 添加文字
        str, okPressed = QInputDialog.getText(self, "输入文字", "请输入文字")
        if okPressed == False or not str:
            return ()

        item = QGraphicsTextItem(str)

        font = self.font()
        font.setPointSize(20)
        font.setBold(True)
        item.setFont(font)

        item.setFlags(QGraphicsItem.ItemIsMovable
                      | QGraphicsItem.ItemIsSelectable
                      | QGraphicsItem.ItemIsFocusable)
        item.setPos(-50 + (QtCore.qrand() % 100), -50 + (QtCore.qrand() % 100))
        self.view.frontZ = self.view.frontZ + 1
        item.setZValue(self.view.frontZ)

        self.view.seqNum = self.view.seqNum + 1
        item.setData(self.view.ItemId, self.view.seqNum)  # //自定义数据,ItemId键
        item.setData(self.view.ItemDesciption, "文字")

        self.scene.addItem(item)
        self.scene.clearSelection()
        item.setSelected(True)
예제 #2
0
class CallOut():
    ''' This represents a callouton the diagram
        This class creates a text item and then surrounds it with a polygon that is a rectangle
        with a pointer to another object on the diagram.
        This can be used by hover over functions or be displayed as a part of a node or relationship
        '''
    def __init__(self, scene, text, anchorPoint, diagramType, format):

        self.scene = scene
        self.model = self.scene.parent.model
        self.text = text
        self.anchorPoint = anchorPoint
        self.diagramType = diagramType
        self.format = format

        # initialize the two qgraphicsitems needed to draw a relationship to None
        self.itemText = None
        self.itemPolygon = None
        self.drawIt

    def name(self, ):
        return "no name"

    def NZID(self, ):
        return None

    def clearItem(self, ):

        if (not self.itemText is None and not self.itemText.scene() is None):
            self.itemText.scene().removeItem(self.itemText)
        if (not self.itemPolygon is None
                and not self.itemPolygon.scene() is None):
            self.itemPolygon.scene().removeItem(self.itemPolygon)

    def drawIt(self, ):
        '''
        draw the callout
        '''

        # if the polygon and text graphics items already exist on the scene then delete them
        self.clearItem()

        # draw the relationship arc
        pen = self.format.pen()
        brush = self.format.brush()

        # create text box
        # draw the text
        self.itemText = QGraphicsTextItem(self.relationInstance.relName,
                                          parent=None)
        self.itemText.setZValue(CALLOUTLAYER)
        self.itemText.setFlag(QGraphicsItem.ItemIsMovable, True)
        self.itemText.setFlag(QGraphicsItem.ItemIsSelectable, True)
        self.itemText.setSelected(False)
        self.itemText.setData(NODEID, self.relationInstance.NZID)
        self.itemText.setData(ITEMTYPE, CALLOUT)
        self.itemText.setHtml(self.genTextHTML())
        # set the position of the text
        self.itemText.setPos(self.anchorPoint)

        # get the height and width of the text graphics item
        th = self.IRtext.boundingRect().height()
        tw = self.IRtext.boundingRect().width()

        #create an empty polygon
        arrowPolygon = QPolygonF()
        # add callout points
        arrowPolygon.append(self.anchorPoint)
        arrowPolygon.append(
            QPointF(self.anchorPoint.x() + tw, self.anchorPoint.y()))
        arrowPolygon.append(
            QPointF(self.anchorPoint.x() + tw, self.anchorPoint.y()))
        arrowPolygon.append(
            QPointF(self.anchorPoint.x() + tw,
                    self.anchorPoint.y() + th))
        arrowPolygon.append(
            QPointF(self.anchorPoint.x(),
                    self.anchorPoint.y() + th))
        self.itemPolygon = QGraphicsPolygonItem(
            arrowPolygon,
            parent=None,
        )
        self.itemPolygon.setZValue(CALLOUTLAYER)
        self.itemPolygon.setBrush(brush)
        self.itemPolygon.setPen(pen)
        self.itemPolygon.setFlag(QGraphicsItem.ItemIsMovable, True)
        self.itemPolygon.setFlag(QGraphicsItem.ItemSendsGeometryChanges, True)
        self.itemPolygon.setFlag(QGraphicsItem.ItemIsSelectable, False)
        self.itemPolygon.setSelected(False)

        # set data in the RelLine object
        self.IRel.setData(NODEID, self.relationInstance.NZID)
        self.IRel.setData(ITEMTYPE, RELINSTANCEARC)
        # add the polygon object to the scene
        self.scene.addItem(self.itemPolygon)
        # add text to the scene
        self.scene.addItem(self.itemText)

    def updateText(self, ):
        #        # force the node instance to update its values in case it has been updated from another diagram or the tree view
        #        self.relationInstance.reloadDictValues()
        #        self.IRtext.setPlainText(self.relationInstance.relName)
        self.itemText.setHtml(self.genTextHTML())

    def genTextHTML(self):
        '''generate html to display the text
        '''
        prefix = '<html><body>'
        suffix = "</body></html>"
        myHTML = ('{}<p><font size="1"> [{}]</font></p>{}'.format(
            prefix, self.text, suffix))
        return myHTML

    def moveIt(self, ):
        self.drawIt()