首页 > 解决方案 > 你如何在 Qt 中使用很多小部件设计你的类?

问题描述

我遇到了如何在 Qt 中设计我的类以防止代码混乱的问题。

我的 MainWindow 有很多Buttons,Labels和其他小部件。我不想让它太大,我想在一个单独的类中处理按钮按下的回调。

问题是,我想尽可能简单地将有关Button印刷机和字符串条目的所有信息传递LineEdits给类。所以,我创建了一个Data只保存数据的类 ( )。

我的测试代码中的另一个类名为MainModule,它只是执行主循环并接收按钮按下的结果。另外,我必须根据 中发生的情况将更改发送MainModule回去,以便我可以设置Labels等等。我使用指向数据类的指针对MainWindow和类进行了此操作。MainModule

Class 4 和 Class 3 只是围绕我的MainModule. 有些需要更多的数据,有些需要更少的数据,所以它们要么有一个引用,Data要么只是将一些变量传递给它们。

我遇到的另一个问题是数据的保存和加载。添加按钮或标签时,我必须在课堂上进行很多更改。我想摆脱这种高耦合,而不让MainWindow班级承担太多责任。

UML 图

我还听说过设计模式模型-视图-控制器(MVC) 可以轻松处理这个问题,但这里的问题是当我遇到问题时我不知道如何使用它我MainWindow是视图,但也可以处理所有的控制在同一时间?

标签: c++qt

解决方案


首先,你的担心是对的。您绝对不希望您的类承担超出其主要功能的职责。你的每个类都应该有一个特定的、范围有限的目的。我建议您阅读 Uncle Bob 的Clean Code以对此进行很好的讨论。

对于您的问题:我假设您当前正在接收用户操作QButtonsQLineEdits等,通过将它们的各种连接signals到您自己的slots(参见Qt Signals and Slots)。您可能缺少的是,您不仅限于将给定信号连接到单个插槽 - 您可以将它们连接到多个插槽,跨多个类。

因此,如果您有两个类,一个与 UI 相关,一个用于数据收集,它们都需要接收按钮的点击,只需将点击连接到两个插槽即可。使您的数据收集类继承QObject,使其具有信号/插槽机制。

例如,这是一个图像模型(从上面的 Qt 链接中借用)。我添加了以红色绘制的信号:

在此处输入图像描述


推荐阅读