尽管我绝对喜欢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/

10-12 17:50
查看更多