一共有3种方法用于管理窗体上子窗口部件的布局:绝对位置法、人工布局法和布局管理器法。相比于使用固定尺寸和位置,布局提供了功能强大且极具灵活性的另一种方案。使用布局后,编程人员无需计算尺寸和位置,布局可以自动进行调整,符合用户屏幕、语言以及字体的要求。
1.绝对位置法
这种方法是最原始的摆放窗口部件的方法,甚至都不能称其为“摆放”。它对窗体的各个子窗口部件分配固定的大小和位置,是通过调用基类QWidget提供的setGeometry()函数来实现的。
绝对位置法有很多缺点:
◆用户无法改变窗口的大小,当父窗口改变时,子窗口不能做出相应的调整。
◆如果用户选择了一种不大常用的大字体,或者当应用程序被翻译成另外一种语言时,也许会把一些文本截断。
◆对于某些风格的平台,这些窗口部件可能会具有并不合适的尺寸大小。
◆必须人工计算这些位置和大小。这样做不仅非常枯燥而且极易出错,并且还会让后期的维护工作变得痛苦万分。很显然,使用这种方式管理GUI应用程序大大降低了程序员的开发效率,降低了应用程序的质量和适应性。
2.人工布局法
这种方法的核心是通过重载QWidget::resizeEvent(QResizeEvent*)函数来使得子窗口的的大小尺寸总是和父窗口的大小成比例,也就在一定程度上减轻了计算量,但是在其中也要通过setGeometry()函数来设置子窗口部件的位置和大小。在程序的规模比较小,并且不需要时常变更设计的情况下,绝对位置法勉强可以胜任。但是它就像前面的绝对位置法一样,仍然需要计算许多手写代码中的常量,尤其是当设计被改变的时候,这种情况更加突出,而且它并没有消除文本会被截断的危险。辅以社会自子窗口部件的大小提示,应该可以规避这种风险,但是这样会使代码变得尤为复杂。
3.布局管理器法
这种方式是使用Qt设计用户界面、组织管理Qt窗口部件的最好方法。布局管理器为窗口部件提供了有感知的默认值(sensibledefaultsizes),可以随着窗口部件大小的变化,对子窗口部件的大小和位置做出适当的调整。