我正在构建一个Qt应用程序,它有大约30个不同的视图(QWidgets)。我的想法是使用QStackedWidget来简化应用程序中不同视图之间的切换。我有两种不同的解决方案来实现这一点,并在用户浏览应用程序时尽可能少地使用内存。
解决方案1:每次我需要显示一个视图时,我都会检查它是否已经在堆栈中。(用户可能多次打开同一视图,可能是显示数据库中某项的视图)。如果视图已经在堆栈中,则不需要重新创建它,我只需显示视图即可。
这个解决方案的好处是我重用了视图(小部件),因此它们只需要创建一次。这很好,因为用户每次显示视图时,UI和其他东西看起来应该是一样的,所以为什么不重用它呢?这种解决方案的问题是每个视图都有子视图。也许是一个对象,一个包含对象或其他东西的QList。Qt的一个好处是你可以使用父-子机制,这样当父对象被删除时,子对象也会被删除。因为我从不删除父(视图),所以我需要自己处理这个问题,因为在显示视图时,可能需要从不同的时间删除子视图。(也许视图会显示一个包含对象的列表,并且每次显示视图时,都应该从数据库更新该列表。)
解决方案2:每次我需要显示一个QWidget时,我都会创建一个新的并显示它。当它不再显示时,我将其从内存中删除。
这是一个非常简单的解决方案。当我删除没有显示的视图时,视图和它的子级都应该从内存中删除,这样就不会增加内存,对吗?
你推荐哪一种解决方案?
发布于 2010-04-15 00:22:05
如果内存如此紧张,最好的办法就是根据需要实例化和删除。
如果您遵循MVC型架构,那么您的数据模型应该与视图不同,因此QWidget类不应该在不使用时保留对数据模型的引用。也就是说,当不再需要您的QWidget类时,您可以保持它的实例化,但是“无效”对数据模型的引用(我假设它管理自己的内存)。
https://stackoverflow.com/questions/2639035
复制相似问题