c++ - 你如何在 Qt 中使用很多小部件设计你的类?
问题描述
我遇到了如何在 Qt 中设计我的类以防止代码混乱的问题。
我的 MainWindow 有很多Buttons
,Labels
和其他小部件。我不想让它太大,我想在一个单独的类中处理按钮按下的回调。
问题是,我想尽可能简单地将有关Button
印刷机和字符串条目的所有信息传递LineEdits
给类。所以,我创建了一个Data
只保存数据的类 ( )。
我的测试代码中的另一个类名为MainModule
,它只是执行主循环并接收按钮按下的结果。另外,我必须根据 中发生的情况将更改发送MainModule
回去,以便我可以设置Labels
等等。我使用指向数据类的指针对MainWindow
和类进行了此操作。MainModule
Class 4 和 Class 3 只是围绕我的MainModule
. 有些需要更多的数据,有些需要更少的数据,所以它们要么有一个引用,Data
要么只是将一些变量传递给它们。
我遇到的另一个问题是数据的保存和加载。添加按钮或标签时,我必须在课堂上进行很多更改。我想摆脱这种高耦合,而不让MainWindow
班级承担太多责任。
我还听说过设计模式模型-视图-控制器(MVC) 可以轻松处理这个问题,但这里的问题是当我遇到问题时我不知道如何使用它我MainWindow
是视图,但也可以处理所有的控制在同一时间?
解决方案
首先,你的担心是对的。您绝对不希望您的类承担超出其主要功能的职责。你的每个类都应该有一个特定的、范围有限的目的。我建议您阅读 Uncle Bob 的Clean Code以对此进行很好的讨论。
对于您的问题:我假设您当前正在接收用户操作QButtons
,QLineEdits
等,通过将它们的各种连接signals
到您自己的slots
(参见Qt Signals and Slots)。您可能缺少的是,您不仅限于将给定信号连接到单个插槽 - 您可以将它们连接到多个插槽,跨多个类。
因此,如果您有两个类,一个与 UI 相关,一个用于数据收集,它们都需要接收按钮的点击,只需将点击连接到两个插槽即可。使您的数据收集类继承QObject
,使其具有信号/插槽机制。
例如,这是一个图像模型(从上面的 Qt 链接中借用)。我添加了以红色绘制的信号:
推荐阅读
- c# - 如何通过 VS 插件/扩展更改 Visual Studio 解决方案资源管理器中的项目图标
- c++ - 在 C++ 中此输出的可能原因是什么?
- c++ - 当依赖于代码时,如何从 Cpp 执行操作系统命令?
- django - 我们可以在没有 Crispy Forms Template 的情况下创建 django 表单吗?
- powershell - 在 Get-ChildItem 之后找不到 Powershell Get-Content 文件
- android - 本机 Android java 方法没有找到任何参考
- docker - 通过 docker image 运行 python 代码时出错
- python - 来自 Pandas Dataframe 的多个 Seaborn 热图
- android - Jsoup getElementsByClass 得到零结果
- python - 数据集的python中的3d条形图