如何创建扩展QGraphicsItem以定义新类型项的类?
我正试着这么做
#!/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_())但我知道这个错误
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是一个抽象类
发布于 2010-06-28 10:05:04
解决办法是
#!/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_())发布于 2011-10-13 22:08:33
朋友总是必须实现函数boundingRect ()和the (.)如果你想在现场显示图表的话。Qt文档说:
要编写自己的图形项,首先创建QGraphicsItem的一个子类,然后实现它的两个纯虚拟公共函数: boundingRect() (返回该项绘制的区域的估计值)和you ()(实现实际绘图)。例如:
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);
}
};https://stackoverflow.com/questions/3131399
复制相似问题