Qt/OO 最佳实践:连接信号和槽

Qt/OO best practices: connecting signals and slots

虽然我非常喜欢 Qt,但我对 Qt 的体验相对较差。我不确定的一件事是最好的地方是将信号连接到插槽。这是我带触摸屏的小型设备的示例:

我有一个名为 RadioModel 的 class,它属于我的 QApplication。我的 QApplication 还拥有我所说的 ViewController。 ViewController 拥有视图 - 即构成用户界面的所有小部件。当然,UI 小部件有一些层次结构。顶级小部件是一个 QHBoxLayout,它在顶部有指示器标签,在底部有一个 QTabWidget。 QTabWidget 有 3 个屏幕,每个屏幕都有 QLabels、QGroupBoxes、QComboBoxes 等。

当 QGroupBoxes 和 QComboBoxes 中的值发生变化时,需要向模型发出信号。我最初的想法是有一个这样的链:

QRadioButton(QGroupBox 的一部分)发出 clicked() 信号,这将转到 QTabWidget 当前选项卡的 SLOT,它查看发送者以确定被点击的值(哪个单选按钮),然后发出它自己的像 RadioChanged 这样的信号。此 RadioChanged 信号将连接到 ViewController 的 RadioChanged 信号,后者又将连接到模型的 UpdateRadio 插槽。

一般来说,当与模型完全隔离的小部件发出感兴趣的信号时,让这一长串信号和插槽将该值更改回模型是否公平?将模型传递到 ViewController 和它的一些对象中是否会更好,以便信号可以连接到更短的路径?

谢谢 - 希望这是可以理解的,希望不要太主观..

我实现我的 'the controller controls the flow of data'。它从视图中获取信号。然后根据需要更新模型。视图对模型一无所知,反之亦然。

我注意到你说过你在向每个用户输入更改发出信号。这可能非常低效,并且很难取消一半的更改。我通常让用户更改所有字段,并且仅在按下 OK 按钮时才更新模型。