2010-04-14 165 views
0

我正在构建一个包含大约30个不同视图(QWidgets)的Qt应用程序。我的想法是使用QStackedWidget来轻松切换应用程序中的不同视图。我有两种不同的解决方案来实现这一点,并在用户浏览应用程序时使用尽可能少的内存。Qt:QStackedWidget解决方案

解决方案1: 每次我需要显示一个视图时,我会检查它是否已经在堆栈中。 (用户可能会多次打开相同的视图,也可能是显示数据库中项目的视图)。如果视图已经在堆栈中了,它不需要再次创建,我只能显示视图。

这个解决方案的好处是我重用视图(小部件),所以他们只需要创建一次。这很好,因为每次用户显示视图时UI和其他内容都应该看起来相同,为什么不重用呢?这个解决方案的问题是每个视图都有儿童。也许是一个对象,一个带有对象或其他东西的QList。 Qt的一个好处是你可以使用父子机制,这样当父对象被删除时,子对象将被删除。因为我从不删除父视图(视图),所以我需要自己处理,因为当显示视图时,可能需要从不同的时间删除子视图。 (也许视图显示一个包含对象的列表,并且每次显示视图时都应该从数据库更新列表)。

解决方案2: 每次我需要显示QWidget时,我都会创建一个新的并显示它。当它不再显示时,我从内存中删除它。

这是一个相当简单的解决方案。而当我删除视图时,他们没有显示视图和它的孩子应该从内存中删除,所以它不应该增加内存,我说得对吗?

您推荐哪种解决方案?

回答

2

如果内存是,那么紧,它可能是最好的只是根据需要实例化和删除。

如果您遵循MVC类型的体系结构,那么您的数据模型应该与您的视图不同,因此QWidget类在不使用时不应保留对数据模型的引用。也就是说,当你的QWidget类不再需要的时候,你可以保持它的实例化,但对数据模型的引用“无效”(我认为它是管理它自己的内存)。

+0

谢谢!它适用于Symbian操作系统,因此内存可能并不那么紧密,但只是想选择最适合的解决方案。 – Martin 2010-04-14 18:48:40

+0

然后,我会选择#2,因为它似乎是最简单的。如果性能成为问题,您可以稍后重新访问(分析后)。 – metasim 2010-04-14 21:34:35

+0

我尝试过使用这两种解决方案。第一个速度非常快,但第二个速度非常快,而第二个速度对我选择的第二个内存更好。谢谢你的帮助! – Martin 2010-04-16 09:50:50