【发布时间】:2019-09-12 22:59:35
【问题描述】:
我有一个包含很多小部件的 MainWindow,请参见下图(抱歉删除了名称)。
如您所见,该窗口由一个选项卡小部件组成,每个选项卡中都有一个工具箱小部件。工具箱小部件中的每个页面都包含一些按钮和一个树形小部件。不同选项卡和不同页面上的树小部件可以相互影响。至此,我已经编写了部分 ui 信号处理代码,基本上只是在 mainwindow.cpp 中编写动作。然而,代码已经变得相当大(1445 行),而我认为我只编写了 1/4。
我在多个地方读到过这么大的文件通常意味着代码设计不正确。所以我的问题是: 将所有的 ui 信号处理写在一个最终可能包含 6000 多行的文件中是否有问题?
如果是的话,请您给我一些工具,让我知道如何使它更小。目前,我实际上有一个包含多个源文件的标头,以便更好地概览。但是根据某些人的说法,这仍然意味着您的代码设计不当。我可以制作更多课程,但我只是不知道如何(尤其是因为我的页面相互依赖)。我虽然关于创建一个具有 Ui::MainWindowClass 对象作为成员的类,但这里的问题是我将失去最大限度地使用 VS19 的能力,因为不再识别 ui 小部件,即 VS 不会列出所有输入 ui-> 时的小部件。
我知道以下问题:With Qt, what are good ways to break up a large source file containing GUI logic? 但我如何模块化它(如果需要)对我来说还不够清楚。
编辑:我喜欢继续使用 Qt Designer。我不确定这是否有什么不同。
【问题讨论】:
-
6000 行文件对编译器来说不是问题(至少在现代机器上不是);对于人类读者/维护者来说,这可能是个问题。如果你想让它更小,要做的一件事是查看代码中彼此相同(或几乎相同)的代码部分;当你找到它们时,看看你是否可以重构以便删除冗余代码(例如,通过将代码移动到一个单独的函数中,该函数可以从多个位置调用,可能使用不同的参数,而不是保留多个代码副本)
-
@JeremyFriesner 我确实在某个时候已经这样做了。这在当时为我节省了大约 150 行。但确实总是一个好主意要牢记!
-
我喜欢继续使用 Qt 设计器。我不确定这是否有什么不同。应该没有什么不同。
-
@drescherjm 你能向我解释一下我将如何制作 Fereanor 描述的自定义小部件吗?