首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pyqt扩展QGraphicsItem

用pyqt扩展QGraphicsItem
EN

Stack Overflow用户
提问于 2010-06-28 09:47:55
回答 2查看 5.6K关注 0票数 1

如何创建扩展QGraphicsItem以定义新类型项的类?

我正试着这么做

代码语言:javascript
复制
#!/usr/bin/python

import sys
from PyQt4 import QtGui

class Node(QtGui.QGraphicsItem):
    def __init__(self, parent = 0):
        self.setFlag(QtGui.QGraphicsItem.ItemIsMovable)


app = QtGui.QApplication(sys.argv)

scene = QtGui.QGraphicsScene()
scene.addText("test")

scene.addItem(Node())

view = QtGui.QGraphicsView(scene)
view.show()

sys.exit(app.exec_())

但我知道这个错误

代码语言:javascript
复制
Traceback (most recent call last):
  File "primo.py", line 15, in <module>
    scene.addItem(Node())
  File "primo.py", line 8, in __init__
    self.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
RuntimeError: underlying C/C++ object has been deleted    

我做错了什么?我不能在Node的QGraphicsItem init方法中调用QGraphicsItem构造函数,因为QGraphicsItem是一个抽象类

EN

回答 2

Stack Overflow用户

发布于 2010-06-28 10:05:04

解决办法是

代码语言:javascript
复制
#!/usr/bin/python

import sys
from PyQt4 import QtGui

class Node(QtGui.QGraphicsItem):
    def __init__(self, parent = None):
        QtGui.QGraphicsItem.__init__(self,parent)
        self.setFlag(QtGui.QGraphicsItem.ItemIsMovable)

app = QtGui.QApplication(sys.argv)

scene = QtGui.QGraphicsScene()
scene.addText("test")

scene.addItem(Node())

view = QtGui.QGraphicsView(scene)
view.show()

sys.exit(app.exec_())
票数 6
EN

Stack Overflow用户

发布于 2011-10-13 22:08:33

朋友总是必须实现函数boundingRect ()和the (.)如果你想在现场显示图表的话。Qt文档说:

要编写自己的图形项,首先创建QGraphicsItem的一个子类,然后实现它的两个纯虚拟公共函数: boundingRect() (返回该项绘制的区域的估计值)和you ()(实现实际绘图)。例如:

代码语言:javascript
复制
 class SimpleItem : public QGraphicsItem
 {
 public:
     QRectF boundingRect() const
     {
         qreal penWidth = 1;
         return QRectF(-10 - penWidth / 2, -10 - penWidth / 2,
                       20 + penWidth, 20 + penWidth);
     }

     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
                QWidget *widget)
     {
         painter->drawRoundedRect(-10, -10, 20, 20, 5, 5);
     }
 };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3131399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档