如何解决堆/堆栈-进入QGraphicsItemGroup的变量范围
|| 如果我有一个QGraphicsItem想要放入QGraphicsItemGroup中,则在循环中是这样的:for(int i =0; i < 2; i++)
{
for(int j = 0; j < 2; j++)
{
QPixmap p(imwidth,imheight);
p.fill(Qt::gray);
QGraphicsPixmapItem *ipi = new QGraphicsPixmapItem(p);
group->addToGroup(ipi);
}
}
该项目是否必须在堆上,还是我可以将其设置为一个堆栈变量,并希望它在仍在组中可见,该组在此for循环之外声明?
解决方法
addToGroup
方法使用一个指针,因此您不能不传递任何其他内容。它不复制传入的对象,仅存储该指针。
如果您给它一个指向堆栈分配对象的指针,它将早晚尝试访问可能很可能被覆盖的堆栈内存,即使它(被奇迹般地)未被覆盖,它们也会迟早崩溃。这些物件无论如何都会被销毁-因此它们在任何情况下都将无效。
, 如果将QGraphicsPixmapItem声明为堆栈变量,则它将在循环的每次迭代时被销毁。因此,将其地址用作QGraphicsItemGroup :: addToGroup方法的指针很可能会导致程序稍后出现分段错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。