gpt4 book ai didi

c++ - 你如何在 Qt 中设计带有大量小部件的类?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:42 25 4
gpt4 key购买 nike

我遇到了一个问题,我应该如何在 Qt 中设计我的类,以防止代码困惑。

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

问题是,我想尽可能简单地将有关 Button 按下和字符串输入到 LineEdits 的所有信息传递给类。因此,我创建了一个仅保存数据的类 (Data)。

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

Class 4 和 Class 3 只是围绕我的 MainModule 执行一些其他功能的类的一些示例。有些需要更多数据,有些则需要更少,因此它们要么具有对 Data 的引用,要么只获取一些传递给它们的变量。

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

UML diagramm

我也听说过设计模式model-view-controller (MVC) 可以很容易地处理这个问题,但这里的问题是,当我遇到 MainWindow 是 View 的问题时,我不知道如何使用它,但也处理所有控件同时?

最佳答案

首先,您的担心是对的。您绝对不希望您的类承担其主要功能之外的责任。您的每个类(class)都应该有一个特定的、范围有限的目的。我会推荐阅读鲍勃叔叔的 Clean Code对此进行了很好的讨论。

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

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

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

enter image description here

关于c++ - 你如何在 Qt 中设计带有大量小部件的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52786758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com