我正在利用Qt 5开发一个C项目,它有一个包含大量UI元素的复杂窗口.此窗口是使用Qt Designer设计的,并从UI文件加载.
我发现Qt典型的模式是在其主要的包含类中编写窗口UI的所有逻辑;即他们的文档中的“单一继承方法”.例如,你有一个名为QMyWindow的类和一个定义布局的相应qmywindow.ui文件,QMyWindow包含UI的所有逻辑,主要是利用自动连接的槽方法(即名为on_objectName_signalName的方法).对于没有很多复杂性的简单窗口,这很好.但是,对于大型复杂的窗口,将所有内容放在一个类中的模式开始崩溃,因为文件太大而且杂乱无章.
我的大型复杂窗口的源文件现在超过3000行.我已经把窗口的所有实际功能分解成其他类,所以这3000行代码主要是做UI的繁重工作.从本质上讲,将所有内容放在窗口类的视野范围内是有意义的.太多了.
使用其他语言和GUI工具包,我可以非常有效地将窗口分解为逻辑部分.例如,在iOS或OS X应用程序中,我可以在故事板文件中使用嵌入式控制器,允许我以逻辑方式在多个控制器之间分解逻辑,并且仍然可以对UI本身进行良好的WYSIWYG编辑.
但我不知道使用Qt做到这一点的好方法.我没有在Qt Designer中找到任何允许您将单个UI文件拆分为多个类处理的多个部分的内容.如果我自己编写用于创建和布局UI的代码,我当然可以这样做,但qmake从设计器文件生成的结果代码创建了一个ui命名空间和一个setupUI函数,可以在包含窗口中创建所有内容.我不知道如何分开并继续使用自动连接.
Qt中有一些机制可以动态加载几个设计器文件,然后将它们嵌入到一个小部件中,但如果我要使用它,我会a)显着增加我的代码的复杂性,以及b)失去了所谓的WYSIWYG编辑,我不想这样做.
这里有什么好的选择吗?我不想保留一个难以导航的3000行文件,但我不知道如何分解它仍然使用Qt的工具,特别是Qt Designer,就像他们想要的那样.
最佳答案 3000行代码不是问题,不完全确定为什么你不这么认为.
无论如何,在单个“单元”中执行非常复杂的UI是一个坏主意.您应该将一个巨大的UI模块化到不同的UI中并将它们组合在一起.
总而言之,我建议不要使用UI设计器,而是完全在代码中编写UI.但即使你开始使用设计师,it is possible to register your custom widgets for use with it.