图片引自花瓣:深堀隆介 创意立体树脂金鱼画
思维的定式
一直以来都是使用手动在cpp文件中自定义控件,通过各种Layout控制布局进行界面绘制。
同时对于存在多个QWidget及其相关联的时候就需要分别把对应控件安放到对应的Dialog中,然后通过ManWindow负责转发子QWidget间的消息。从界面功能划分上比较清晰,不过有时候也存在拗口啰嗦。
长久使用下来,一直固话这种方式,突然遇到需要对界面进行改动,比如将A Widget中的控件挪动到B Widget里,然后还需要保证功能的完整。按以前的思路就只有先将控件在B中实现,再添加对应相应函数,如果有需要保存控件内容还需要将内容添加到B的保存函数中,处理起来相当麻烦。
脑筋虽然固化得很,但遇到麻烦时候就想偷懒了,直接将控件在A中传出去,然后再在B中放到B的Layout,然后其他都不用迁移。关于该控件的一切仍然在A中完成。达到了控件迁移的效果。
QLineEdit *getOptionEdit() { return mopLetEdit; }
此Docker非彼Docker
也就是说,其实可以先建立一个控件的容器,里面包含大多控件的定义以及事件处理,然后将各个控件分发到不同的页面里面实现不同的Tab之类的效果。这样简化编码,同时易于在业务变更时候调整界面设计。不过缺点就是容器类会比较庞杂,同时代码量大。控件间没有因页面设计而达到分离。
优缺点都有,不过突破了自己固有的谁的页面就负责谁的控件思维还是很有趣的。