如果你有很多小的类(通常是创建和销毁的),它们都依赖于设置,你会怎么做呢?
如果不需要将每个对象都连接到某种“设置更改”信号上就好了,即使我这样做了,所有设置也会更新,即使是那些设置没有更改的对象也是如此。
发布于 2011-04-05 06:01:45
当我自己面对这种情况时,我发现从中央位置控制保存/加载设置更好。您是否真的需要定期保存/加载设置,或者是否可以在实际需要进行节省时使用主对象(可能带有子对象列表)进行控制?或者,在最坏的情况下,当对象被创建和销毁时,让它们更新父集合中的内存设置映射,并在它认为应该保存时保存,而不是子对象销毁。
发布于 2013-08-22 07:30:50
下面给出了实现它的一种方法。
如果您愿意,设置的中心位置可以是从QAbstractItemModel派生的单个对象,并且您可以根据需要轻松地将dataChanged(...)信号连接到各种对象,以接收有关更改设置的通知。这些对象可以决定是否更改了适用的设置。通过明智地使用helper和shim类,您可以非常容易地将您的“小类”与通知联系起来。这将解决模型驱动的设置方法中固有的两个问题。
过滤和选择都可以由一个填充类来处理,该类接收所有的dataChanged通知,并为每个有用的索引维护一个订阅者列表。然后,只有“感兴趣的”对象的槽被调用。这个类将自己维护订户-插槽对的列表,而不提供任何信号供其他用户连接。它将使用invokeMethod或类似的机制来调用插槽。
可以通过观察订户类在初始化时将向模型查询影响其操作的所有设置的初始值来处理选择问题。您所需要的就是在订阅服务器初始化期间创建的临时代理模型。代理模型获取调用者的QObject*实例,并记录被查询的所有模型索引(将它们传递给单例设置模型)。当代理模型在从subscriber类的初始化返回时最终被销毁时,它将关于此QObject的模型索引的信息提供给单例。需要一个额外的调用来让单例知道要调用的槽,但这就像调用connect()一样。
https://stackoverflow.com/questions/5543044
复制相似问题