Qt:QStackedWidget解决方案

Qt:QStackedWidget解决方案,qt,memory,memory-management,Qt,Memory,Memory Management,我正在构建一个Qt应用程序,它有大约30个不同的视图(QWidgets)。我的想法是使用QStackedWidget,以便在应用程序中的不同视图之间轻松切换。我有两种不同的解决方案来实现这一点,并在用户浏览应用程序时尽可能少地使用内存 解决方案1: 每次我需要显示视图时,我都会检查它是否已经在堆栈中。(用户可能多次打开同一个视图,可能是显示数据库中项目的视图)。如果视图已经在堆栈中,则无需再次创建,我只需显示视图 这个解决方案的好处是我重用了视图(小部件),所以它们只需要创建一次。这很好,因为用

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

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

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

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

这是一个相当简单的解决方案。当我删除没有显示的视图时,视图和它的子视图都应该从内存中删除,这样就不会增加内存,对吗

您推荐哪一种解决方案?

如果内存非常紧张,最好根据需要实例化和删除


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

谢谢!它是为Symbian操作系统设计的,所以可能内存没有那么紧,但我只是想选择最好的解决方案。那么我选择选项2,因为它看起来最简单。如果性能成为问题,您可以稍后(在分析之后)重新访问。第一个速度非常快,但第二个速度也相当快,而且#2对我选择的记忆更好#2。谢谢你的帮助!