QGraphicsView切换多个QGraphicsScene及setScene传nullptr合法性咨询
QGraphicsView动态切换场景问题解答
1. 能否动态切换场景
完全可以。QGraphicsView::setScene 本身就被设计为支持运行时动态切换绑定的场景,没有限制只能绑定一次固定场景。
你给出的示例代码逻辑是成立的,只要保证所有QGraphicsScene对象的生命周期长于绑定的QGraphicsView即可,避免场景被提前销毁后视图访问野指针。你的示例中场景作为MyViewer的成员变量,和视图生命周期一致,符合安全要求。
2. 能否传入nullptr清空场景
可以安全传入nullptr。Qt官方对该接口的定义明确支持空指针参数,调用setScene(nullptr)后,视图会清空所有渲染内容,不再关联任何场景,不会出现崩溃、内存泄漏等异常问题,是官方推荐的临时清空视图显示的实现方式。
示例代码注意事项
你的示例代码存在一处笔误:成员变量命名为scenes[10],但update函数中调用时写的是&(scene[i]),少了末尾的s,修正后即可正常运行。
修正后的update函数参考:
void update(){ if(i >= 10) i = 0; sc.setScene(&scenes[i]); i++; }
内容的提问来源于stack exchange,提问作者desio
相关产品推荐
相关产品推荐

