我正在开发一个GUI,它允许用户在背景图片上使用鼠标/QSpinBox事件修改椭圆。
我想设置它,以便当用户单击一个椭圆,椭圆改变颜色,并已被“选中”。
我正在使用QGraphicsView/场景与QGraphicsEllipseItem。在这里,我的问题是,setPen(QPen & const)调用是一个引用,因此:
无论如何,我一定是搞错了,有什么建议吗?
P.S. -我想避免再做一个成员变量。我要有很多椭圆,每一个都不应该有自己的笔变量!
此代码将导致分段错误:
void MyClass::SetupEllipses()
{
QPen pen();
pen.setColor(QColor(255,0,0));
pen.setWidth(2);
m_ellipse = new QGraphicsItemEllipse(); //This is a member variable of MyClass
m_ellipse->setRect(some ssize here);
m_ellipse->setPen(pen);
m_graphicsview->scene()->addItem(m_ellipse); //m_graphicsview is also a member variable of MyClass and has had a scene added to it.
}发布于 2012-10-29 19:31:59
如果我在堆栈上分配了一支笔并把它传入,我就会得到一个分段错误。
这是正确的方法-如果你得到一个分段错误,这肯定不是由于QPen。张贴您的代码和调试器堆栈跟踪。
每个QGraphicsEllipseItem无论如何都会存储QPen的一个(轻量级)副本,因此在堆上创建QPen实例是荒谬和容易出错的。不要担心太多的QPen实例。QPen使用隐式共享,也就是说,如果你共用同一支未经修改的钢笔,拷贝就很便宜。
https://stackoverflow.com/questions/13127140
复制相似问题