首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QGraphicsScene::setSceneRect()分段错误

QGraphicsScene::setSceneRect()分段错误
EN

Stack Overflow用户
提问于 2012-10-25 07:58:50
回答 1查看 644关注 0票数 2

我有一个QGraphicsScene,我在其中添加了一个名为BorderRect的子类QGraphicsRectItem,用于指示sceneRect的边界。BorderRect具有允许用户更改其大小的夹点,然后更改场景的sceneRect。所有这些都是有效的,除非它偶尔会导致seg错误,并具有如下的回溯跟踪:

代码语言:javascript
复制
#0  _int_malloc (av=0x7ffff587e620, bytes=32) at malloc.c:3415
#1  0x00007ffff55592a4 in *__GI___libc_malloc (bytes=32) at malloc.c:2924
#2  0x00007ffff5e4c40d in operator new(unsigned long) () from /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libstdc++.so.6
#3  0x00007ffff723911e in QRegion::QRegion(QRect const&, QRegion::RegionType) () from /usr/lib64/qt4/libQtGui.so.4
#4  0x00007ffff72394de in QRegion::intersect(QRect const&) const () from /usr/lib64/qt4/libQtGui.so.4
#5  0x00007ffff7239509 in QRegion::operator&(QRect const&) const () from /usr/lib64/qt4/libQtGui.so.4
#6  0x00007ffff723952f in QRegion::operator&=(QRect const&) () from /usr/lib64/qt4/libQtGui.so.4
#7  0x00007ffff70e0c6b in QWidgetPrivate::subtractOpaqueSiblings(QRegion&, bool*, bool) const ()
  from /usr/lib64/qt4/libQtGui.so.4
#8  0x00007ffff72b6141 in QWidgetPrivate::scrollRect(QRect const&, int, int) () from /usr/lib64/qt4/libQtGui.so.4
#9  0x00007ffff712fe8a in QWidgetPrivate::scroll_sys(int, int) () from /usr/lib64/qt4/libQtGui.so.4
#10 0x00007ffff70eefe5 in QWidget::scroll(int, int) () from /usr/lib64/qt4/libQtGui.so.4
#11 0x00007ffff76b7fbb in QGraphicsView::scrollContentsBy(int, int) () from /usr/lib64/qt4/libQtGui.so.4
#12 0x00007ffff6b7c0fa in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) ()
  from /usr/lib64/qt4/libQtCore.so.4
#13 0x00007ffff770ec7e in QAbstractSlider::valueChanged(int) () from /usr/lib64/qt4/libQtGui.so.4
#14 0x00007ffff76b0dca in QGraphicsViewPrivate::recalculateContentSize() () from /usr/lib64/qt4/libQtGui.so.4
#15 0x00007ffff76bab39 in ?? () from /usr/lib64/qt4/libQtGui.so.4
#16 0x00007ffff6b7c0fa in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) ()
  from /usr/lib64/qt4/libQtCore.so.4
#17 0x00007ffff7687a45 in QGraphicsScene::sceneRectChanged(QRectF const&) () from /usr/lib64/qt4/libQtGui.so.4
#18 0x000000000042fef0 in BorderRectItem::sceneEventFilter (this=0xfc0070, watched=0xef6e80, event=0x7fffff800590)
    at gui/BorderRectItem.cpp:193
...

还有几行,但是在反向跟踪的第18行引用的行对应于使用与BorderRect的新维度相对应的QRectF调用setSceneRect,在本例中:

代码语言:javascript
复制
{xp = 20, yp = -59, w = 563.94193411401511, h = 436.5631806793956}

我不知道为什么它会崩溃。我查过现场了,不是空的。我怀疑这将是非常难以调试的,我真正感兴趣的是如何进行调试的提示。特别是,当我在回溯过程中上下移动时,检查Qt代码中变量的状态将非常有帮助,但我不知道如何做到这一点。我在运行Linux..。我可以用调试符号或其他东西重新构建Qt吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-25 20:29:16

这里只是猜测,但堆栈跟踪让我怀疑,您从自己一些方法返回了对本地堆栈QRect的引用,或者返回了对其他堆栈变量的引用(甚至是指向堆栈变量的显式指针,但这很难意外地做到)。

是的,您可以使用调试符号编译Qt,请参见:

  • http://doc.qt.digia.com/latest/install-x11.html#step-3-building-the-library
  • http://doc.qt.digia.com/latest/configure-options.html
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13059664

复制
相关文章

相似问题

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