Qt:QStackedWidget解决方案

时间:2010-04-14 16:08:31

标签: qt memory memory-management

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

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

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

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

这是一个非常简单的解决方案。当我删除视图时,它们都没有显示,视图和它的子节点应该从内存中删除,所以它不应该增加内存,我是对的吗?

您推荐哪种解决方案?

1 个答案:

答案 0 :(得分:2)

如果内存 紧,那么最好根据需要进行实例化和删除。

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