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

时间:2015-04-14 19:55:20

标签: c++ qt signals-slots

我对Qt体验相对较轻,但我非常喜欢它。我不确定的一件事是将信号连接到插槽的最佳位置。以下是我带触摸屏的小型设备的示例:

我有一个名为RadioModel的类,由我的QApplication拥有。我的QApplication也拥有我称之为ViewController的东西。 ViewController拥有视图 - 即构成用户界面的所有小部件。当然,UI小部件有一些层次结构。顶级窗口小部件是QHBoxLayout,顶部有指示标签,底部有QTabWidget。 QTabWidget有3个屏幕,每个屏幕都有QLabel,QGroupBoxes,QComboBoxes等。

当QGroupBox和QComboBox中的值发生变化时,需要对模型进行信号通知。我最初的想法是拥有这样的链条:

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

一般来说,当与模型完全隔离的小部件发出感兴趣的信号时,是否可以通过这个长链信号和插槽将该值更改回模型?将模型传递给ViewController以及可能的某些对象以便信号可以用更短的路径连接会更好吗?

谢谢 - 希望这是可以理解的,希望不要过于主观。

1 个答案:

答案 0 :(得分:2)

我实现了我的控制器控制数据的流量。它从视图中获取信号。然后根据需要更新模型。视图对模型一无所知,反之亦然。

我注意到你说你发出了每个用户输入变化的信号。这可能效率非常低,并且很难取消半成品更改。我通常让用户更改所有字段,只在按下确定按钮时更新模型。