我正在开发一个GUI,它将允许用户使用背景图片顶部的mouse / QSpinBox事件修改椭圆。
我要进行设置,以便当用户单击椭圆时,椭圆会更改颜色并已被“选中”。
我正在将QGraphicsView / Scene与QGraphicsEllipseItem一起使用。这就是我的问题所在,因此setPen(QPen & const)
调用是一个引用:
无论如何,我一定要解决这个错误,有什么建议吗?
附言-我想避免设置ANOTHER成员变量。我将有许多椭圆,每个椭圆都不应该有自己的笔变量!
此代码将导致段错误:
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.
}
最佳答案
这是正确的方法-如果遇到段错误,那肯定不是QPen造成的。
发布您的代码和调试器堆栈跟踪。
无论如何,每个QGraphicsEllipseItem都将存储QPen的(轻量级)副本,因此在堆上创建QPen实例是荒谬的且容易出错。
不用担心太多的QPen实例。 QPen使用implicit sharing,即,如果您共享同一根未修改的笔,则副本便宜。