我正在开发一个GUI,允许用户在背景图片上使用鼠标/ QSpinBox事件修改省略号。
我想进行设置,以便当用户点击椭圆时,椭圆会改变颜色并被“选中”。
我正在使用QGraphicsView / Scene和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.
}
答案 0 :(得分:2)
如果我在堆栈上分配笔并将其传入,我会遇到段错误。
这是正确的方法 - 如果你得到一个段错误,那肯定不是由于QPen。 发布代码和调试器堆栈跟踪。
每个QGraphicsEllipseItem都会存储QPen的(轻量级)副本,因此在堆上创建QPen实例是没有意义且容易出错的。 不要担心太多的QPen实例。 QPen使用implicit sharing,即如果您共享相同的未经修改的笔,则副本便宜。