我正在使用Qt框架编写SDI(单文档界面)应用程序。
我目前遇到“小”问题:如果我在一个MainWindow中更改首选项,我希望同一个MainWindow的所有其他实例加载该首选项,例如:
窗口2:
所有其他窗口(可以是用户想要的数量):
我尝试了很多东西,例如使用SIGNALS / SLOTS,但我无法更改所有窗口,因为在我的应用程序中创建MainWindows的方式是这样的:
窗口1创建窗口2:
窗口2创建窗口3:
窗口3创建窗口4:
这意味着如果更改窗口3中的值,则只有窗口2将加载新设置。
您知道这样做的方法(如何将值传递给窗口的所有子项(和父项))?
答案 0 :(得分:2)
您可以使用QApplication::topLevelWidgets()
获取顶级窗口小部件(窗口)列表。您可以这样称呼它:qApp->topLevelWidgets()
。
有多种方法可以通知这些小部件有关更改的信息。我在下面列出了一些;这个清单并非详尽无遗,还有很多方法可以做到。
您可以使用QObject
将设置存储在动态属性中。任何属性更改时都可以发出信号。重新实现QObject::event()
以处理对象将在动态属性更改时接收的QDynamicPropertyChangeEvent
。每当更改属性时,您只需将其存储在QSettings中即可。可以在构建时从QSettings中检索对象的初始属性值。
每当您更改设置时手动发出信号,并在创建时将其连接到每个SDI窗口。这不需要使用topLevelWidgets()
方法。
使用自定义模型,例如从QAbstractListModel
派生,并将窗口附加到模型的dataChanged
信号。