找回密码
 注册
Simdroid-非首页
查看: 163|回复: 0

[07.原创分享] Qt子窗口设计原则探讨

[复制链接]
发表于 2019-11-7 15:54:06 | 显示全部楼层 |阅读模式 来自 江苏苏州
子窗口是界面程序中常见的部件之一。设计子窗口时,不仅要注意界面的美观、操作逻辑、人机交互等UI设计方面的内容,还应考虑程序设计方面的内容。本文从设计子窗口的几个典型环节来探讨Qt中子窗口的设计原则。
1.窗口的建立
Qt中建立子窗口的典型方法有两种:指针模式和局部变量模式。指针模式要求在父窗口类中保存子窗口的指针,需要显示子窗口时调用该指针,代码示例:


局部变量模式则是在需要的时候用局部变量实例化一个子窗口类,该变量作用域结束后子窗口随即销毁,代码示例:

我们从内存使用、窗口建立速度这两个角度来分析两种模式的特点。
(1)内存使用
指针模式保存子窗口指针的开销可以忽略。这种模式的主要特点是,子窗口建立后,关闭子窗口只是将其隐藏而不是销毁,如果不通过代码主动delete掉为子窗口分配的内存,那么这部分内存会一直被占用。如果设置了父对象,父对象析构时会释放这部分内存。
而局部变量模式中,子窗口一般在函数结束后被析构,不会一直驻留内存。
从内存使用方面来看,可以得出结论,如果子窗口的建立需要很大的内存开销,而程序内存资源较为紧张时,优先使用局部变量模式。当然也可以选择指针模式,然后添加代码,在适当的时机销毁子窗口,但这样更容易出错。
如下图中这个子窗口,建立后连接了数据库,占用了较多的系统资源,所以我们希望能及时的释放这些资源,所以采用了局部变量的模式。
(2)窗口建立速度
程序设计中时间和空间一般是一对矛盾。从内存使用的分析中可以看出,指针模式建立子窗口仅在第一次建立过程中需要花费较多时间,而后以驻留在内存中为代价获得了很快的建立速度。而局部变量模式的子窗口每次建立都要花费同样的时间。因此,如果软件中为了不影响用户体验,需要让某个复杂的子窗口有较快的建立速度,那么可以考虑使用指针模式。
2.数据交互
子窗口与主窗口的数据交互可以有以下几种:
(1)在子窗口类的构造函数中传递数据。此时子窗口类构造函数一般为如下形式:

子窗口通过主窗口传递过来的数据指针来获得和修改数据。这种方法适用于子窗口和主窗口有大量数据交互的情况。该方法封装性比较好,子窗口和主窗口仅通过Data来交互,调整代码时不易出错,代码结构也比较清晰。缺点是需要定义交互数据的结构。
如下图所示,这个子窗口和主窗口有较多的数据交互,所以我们使用了这种方法。
(2)子窗口通过获得主窗口指针来调用主窗口的接口。代码一般如下所示:
这种方法直接违反了接口隔离原则。一般情况下,子窗口仅需要用到主窗口的部分接口,而直接操作主窗口指针显然不合理。这种方法容易出错,一般不推荐使用。但该方法又比较简单,灵活性大,所以在项目中还是可以见到。
(3)使用指针模式时连接子窗口中的信号与主窗口中的槽,然后在槽函数中使用子窗口的指针来调用子窗口接口。因为子窗口类中的Ui部件一般是私有的,这时应当在子窗口类中添加接口或者将UI部件设为公有,以便于主窗口访问。这种方法在一些特殊情况下是不可替代的。典型的例子是实现查找窗口。当子窗口是非模态窗口时,可以考虑使用该方法交互数据。
(4)使用Qt的信号与槽机制。
这种适用场景有限,一般在子窗口操作较为简单时使用。如下图中这个子窗口,仅仅有两个选项,所以使用了这种方法。
从上文中分析中可以总结出设计子窗口的一般步骤:
(1)分析用户需求,设计合理的数据交互方式。
(2)根据用户需求与数据交互方式选择合适的窗口建立方式。
(3)实现子窗口的程序逻辑。
(4)美化子窗口界面,优化操作逻辑,提升用户体验。


您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-23 23:19 , Processed in 0.027629 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表