尽管我绝对喜欢Qt,但我对Qt的体验相对较轻。我不确定的一件事是最好的地方是将信号连接到插槽。这是我的带有触摸屏的小型设备上的示例:
我的QApplication拥有一个名为RadioModel的类。我的QApplication还拥有我所谓的ViewController。 ViewController拥有 View -即构成用户界面的所有小部件。 UI小部件当然有一些层次结构。顶级小部件是QHBoxLayout,其顶部具有指示器标签,底部具有QTabWidget。 QTabWidget有3个屏幕,每个屏幕都有QLabels,QGroupBoxes,QComboBoxes等内容。
当QGroupBoxes和QComboBoxes中的值更改时,需要向模型发出信号。我最初的想法是要有一个像这样的链:
QRadioButton(QGroupBox的一部分)发出信号clicked(),这转到QTabWidget当前选项卡的SLOT,后者查看发送方以确定被单击的值(哪个单选按钮),然后发出自己的信号,例如RadioChanged。该RadioChanged信号将连接到ViewController的RadioChanged信号,该信号又将连接到模型的UpdateRadio插槽。
一般而言,当与模型完全隔离的小部件发出感兴趣的信号时,拥有如此长的信号和插槽链以使该值更改返回模型是否公平?最好将模型传递给ViewController以及可能传递给模型的某些对象,以使信号可以通过较短的路径连接?
谢谢-希望可以理解,但希望不要太主观。
最佳答案
我将我实现为“ Controller 控制数据流”。它从 View 中获取信号。然后根据需要更新模型。 View 对模型一无所知,反之亦然。
我注意到您说过您要发信号通知每个用户输入更改。这会非常低效,并且很难取消一半的更改。我通常让用户更改所有字段,仅在按下“确定”按钮时更新模型。
关于c++ - Qt/OO最佳实践:连接信号和插槽,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29636263/