根据要求重写以澄清。
免责声明:
我是Qt编程的新手,到目前为止,我只编写了一些很小的复杂应用程序,通常遵循提供的示例。
现在,我被要求(重新)为一个现有产品(如果重要的话,一个收银机)编写一个配置GUI,该配置GUI基于一个嵌入式Linux,其中包含一组可能正在扩展的“配置页”。有几个例子:
我开始在Qt设计器中设计界面,我很快意识到,如果我只想做一个以前做过的“更大的版本”,我就会得到大量的意大利面代码。
由此引出了一个原始的,非常普遍的问题:
在具有嵌套容器的复杂接口中(QToolBox、QTabWidget、.)什么是“批准的方式”(如果有的话),以便在"MainWindow“中没有成千上万的插槽?
对于非平凡的例子,任何指向“最佳实践”的指针都将受到欢迎。
状态:
我目前正处于设计/原型设计阶段,我可以很容易地进行更改;当然,以后的更改可能不太方便。
我目前的设计相当标准:
class MWindow(QMainWindow):
def __init__(self):
super(MWindow, self).__init__()
uic.loadUi('app.ui', self)
...
app = QApplication(sys.argv)
mw = MWindow()
mw.show()
sys.exit(app.exec_())
我很快发现,如果我想要进行适当的输入验证,并且“对用户友好”(例如:从编辑的IP地址自动生成Net掩码/广播,更不用说以太网配置和WiFi配置之间的大量代码重复),我可以为每个“页面”处理数十个插槽。这是目前不需要的,但我知道稍后会提出要求,我想提前计划。
问题:
在其他情况下,我会尝试使所有与UI相关的处理更本地化;例如:
一些现实生活中的例子(参见:威雷沙克氏MainWindow)似乎与“单一篮子中的一切”方向相反。
是否有任何合理的综合的最佳实践建议来处理这种情况?
更重要的是:如果我坚持将代码分割成“分而治之”的方法,这将如何转化为QtDesigner/代码关系?(我绝对不想求助于手工代码GUI)。
发布于 2019-10-05 15:02:32
我认为Qt提供的示例将决定最佳实践,因为大多数开发人员都会从这些实践开始,并将他们的标准建立在它们之上。
或者,您可以使用KDE做法作为起点,因为它们可能是最大的Qt项目。
但是.
通常,为了最小化UI元素(例如主窗口)的复杂性,并使应用程序更加解耦(因此,更易于维护),您可以使用(MVC)模式。
在典型的用例中,每个UI元素(“视图”)都由一个控制器类和一个模型类支持。当信号被触发时,会调用控制器上的适当方法。控制器方法依次调用模型上的方法和/或更改另一个UI元素。
上面的例子给出了视图、控制器和模型之间的一对一关联,但是您可以根据您的需求来改变这一点。
还有其他MVC的现代衍生工具(例如MVVM和MVP),但我更喜欢它,因为它很简单,而且当正在使用的框架支持它们时,其他模式更有效。
https://stackoverflow.com/questions/58247357
复制相似问题