首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取代QPen-我该如何删除

取代QPen-我该如何删除
EN

Stack Overflow用户
提问于 2012-10-29 17:59:16
回答 1查看 144关注 0票数 1

我正在开发一个GUI,它允许用户在背景图片上使用鼠标/QSpinBox事件修改椭圆。

我想设置它,以便当用户单击一个椭圆,椭圆改变颜色,并已被“选中”。

我正在使用QGraphicsView/场景与QGraphicsEllipseItem。在这里,我的问题是,setPen(QPen & const)调用是一个引用,因此:

  • 如果我在堆栈上分配了一支笔并把它传入,我就会得到一个分段错误。
  • 如果我在堆上分配了一支笔,当我设置一支新笔时,它不会被删除
  • 访问器方法返回笔的副本。

无论如何,我一定是搞错了,有什么建议吗?

P.S. -我想避免再做一个成员变量。我要有很多椭圆,每一个都不应该有自己的笔变量!

此代码将导致分段错误:

代码语言:javascript
复制
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.
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-29 19:31:59

如果我在堆栈上分配了一支笔并把它传入,我就会得到一个分段错误。

这是正确的方法-如果你得到一个分段错误,这肯定不是由于QPen。张贴您的代码和调试器堆栈跟踪。

每个QGraphicsEllipseItem无论如何都会存储QPen的一个(轻量级)副本,因此在堆上创建QPen实例是荒谬和容易出错的。不要担心太多的QPen实例。QPen使用隐式共享,也就是说,如果你共用同一支未经修改的钢笔,拷贝就很便宜。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13127140

复制
相关文章

相似问题

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