QT graphics view框架下如何实现一个窗体含有多个页面?

nolatestudy 2011-03-25 04:33:01
各位大侠:
最近新学习QT并马上要用到项目中,有哪位大侠愿意指导下我的?不胜感激!
graphics view框架下,一个view对应一个scene时,背景图可以设置在scene,也可以在view的drawBackground绘制。item都加载到scene下,可以实现简单的图形界面应用。
如果一个应用含有多个界面,需要做界面的切换,我的理解是:一个界面就是一个场景,界面中的控件,都是此场景中的item。那么按这思维,一个应用,应该是含有一个view和n个scene。但是,graphics view框架中是一个scene对应有n个view(由函数QList<QGraphicsView *> views () const 获取views),跟我想要实现的恰恰相反。我该怎么去设计我的程序架构?
另外,此为嵌入式平台的应用,有性能上的要求。需求我描述得不好,大家不明白的提出来。
...全文
1191 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nolatestudy 2011-03-28
  • 打赏
  • 举报
回复
正尝试我的想法,同时等待大虾们的高见!
nolatestudy 2011-03-28
  • 打赏
  • 举报
回复
谢谢 coblan!
根据你的意见,事情有了新的进展。
但又出现新的拦路虎了,希望也是只“纸老虎”。
我在item中响应鼠标事件,在item的mouseReleaseEvent中处理退出当前scene并销毁当前scene。
这样的操作引发了一个问题:scene.clear时,删除所有的item,那么当item的mouseReleaseEvent返回的时候,程序就又崩溃了。
是否考虑使用信号-槽机制来实现这个功能?在item的mouseReleaseEvent设置当前view的一个信号,来响应view中自定义的槽函数,由槽函数来销毁scene。
我对QT的学习才刚刚开始,对QT的很多机制都不了解。
有做过类似工作的大虾帮忙解答下,或者提供更好的办法,谢谢!
coblan 2011-03-28
  • 打赏
  • 举报
回复
void QGraphicsView::setScene ( QGraphicsScene * scene )
这个函数难道还不够你用么?重要的不是view,而是你QGraphicsScene 。你需要管理的是Scene,如果你的内存足够,那么就可以生成多个Scene,每次需要切换的时候,view.setScent(scene),应该就能达到切换场景的目的了。如果你的内存不够用,那么你多出来的scene也必须析构掉。
void QGraphicsScene::clear () [slot]
该函数也足够你用了。如果这样,切换场景的时候,你必须重新生成Scene 了。注意了,QgraphicsItem的析构函数,你必须写好,别造成内存泄漏。因为scene.clear是调用场景中item的析构函数进行析构的。
BTW,QT里面view/Model/Item的思想非常普遍,几乎思路都是一致的。
nolatestudy 2011-03-28
  • 打赏
  • 举报
回复
清除资源的问题已解决。
将原来的
pScene->clear();
delete pScene;
改为
pScene->deleteLater();
后,程序先执行完item的鼠标事件函数,接着才析构scene和items。
nolatestudy 2011-03-25
  • 打赏
  • 举报
回复
我想到一个方案是:自行管理scene,每一个view,对应一个scene栈,先入后出,要显示哪个scene,view就绑定此scene。至此,又有以下问题:(1)view和scene的绑定与取消绑定操作该如何实现?(2)当删除scene的时候,资源释放需要哪些操作?

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧