我如何在一个函数中复制 QGraphicsItem?

问题描述 投票:0回答:1

如何复制场景中选定的项目 (

self.canvas
)?

def use_duplicate(self):
    self.label_btn.setChecked(False)
    self.path_btn.setChecked(False)

    items = self.canvas.selectedItems()
    self.duplicate_stack.append(items)

    for item in items:
        try:
            items = self.duplicate_stack.pop()

            print(self.duplicate_stack)

            self.canvas.addItem(items)

        except Exception as e:
            print(e)

我尝试使用列表,然后从列表中抓取项目并将它们添加到我的场景中,但这不起作用。我很好奇为什么没有 .clone() 方法或类似的方法。

如有任何帮助,我们将不胜感激。

python python-3.x pyqt pyqt5 qgraphicsscene
1个回答
0
投票

我很轻松地解决了这个问题

基本上只需复制项目的属性并创建其自身的新版本(例如 QGraphicsTextItem):

    def duplicate(self):
        item = CustomTextItem()
        item.setFont(self.font())
        item.setDefaultTextColor(self.defaultTextColor())
        item.setPlainText(self.toPlainText())
        item.setPos(self.pos())
        item.setScale(self.scale())
        item.setRotation(self.rotation())
        item.setZValue(self.zValue())
        item.setTransform(self.transform())
        item.setTransformOriginPoint(self.transformOriginPoint())

        item.setFlag(QGraphicsItem.ItemIsSelectable)
        item.setFlag(QGraphicsItem.ItemIsMovable)
        item.setToolTip('Text')

        self.scene().addItem(item)

        return item
© www.soinside.com 2019 - 2024. All rights reserved.