资源描述:
《详解 qt 布局管理界面》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、详解QT布局管理界面栅格布局管理器可以以网格的形式,将它所管理的部件以一定的矩阵形式排列。比如上图中,所有的部件一起看,其实就是一种矩阵的形式来排列的。栅格布局管理器最典型的用法是将部件规规矩矩的排列好,每个栅格的单元格里放一个部件,如下图的示例:类似上图这种布局比较容易实现,只需要把各个部件填入到指定的单元格里即可,示例代码如下:1m_Layout->addWidget(Label1,0,0);//将Label1填到(0,0)单元格2m_Layout->addWidget(Label2,0,2);//将Label2填到(0,2)单元格3……而我们要实现的这个温度转换器的界面,并不是一
2、个规则的栅格结构。而是如下这种结构:上图中的这6部分,并不是规规矩矩的栅格形式。那怎么办呢?没关系,栅格布局管理器提供了很大的灵活性。具体表现在,可以设定某个部件是否需要横跨n个列,或者是否需要纵越m个行~~。什么意思呢?先来看一个简单的例子以上面这种布局来说,三个部件其中有两个部件是比较规矩的处于两个单元格内,但是第三个部件就横跨了两列,实际上,我们可以这样来看这张布局图:这样就一目了然了。第三个部件的确是横跨了两列(在水平方向上占用了两个单元格)。在使用栅格布局管理器对三个部件进行管理时,就可以这样:1m_Layout->addWidget(m_Widget1,0,0);//第一个
3、部件在(0,0)2m_Layout->addWidget(m_Widget2,0,1);//第二个部件在(0,1)3m_Layout->addWIdget(m_Widget3,1,0,1,2);//第三个部件起始于(1,0),并纵越1行,横跨2列同样的,再看下图:我们可以认为右侧的部件纵越了两行(在垂直方向上占用了两个单元格),对应的示例代码:1m_Layout->addWidget(m_Widget1,0,0);//第一个部件在(0,0)2m_Layout->addWidget(m_Widget2,1,0);//第二个部件在(1,0)3m_Layout->addWIdget(m_Wi
4、dget3,0,1,2,1);//第三个部件起始于(0,1),并纵越2行,横跨1列这其实很类似于HTML里利用Table做网页布局时使用的手段。稍微了解一些HTML的人都会知道,在Table布局时,单元格会有rowSpan和colSpan的参数,这两个参数的意义其实就是所谓的“纵越n个行”和“横跨m个列”。这里,栅格布局管理器的布局方式,跟它完全一致。OK,回头再看看我们需要实现的界面。我们现在有了rowSpan和colSpan的概念,那么,我们可以把那张界面布局图变换一下:我们把交叉的这些线全部延伸开,可以看到,整个界面被拆分成了3×4个单元格,此时,我们就会惊呼,哈哈,这不就是规规
5、矩矩的栅格了吗(虽然它的每个单元格不是一样大,但是没关系,至少行和列都是规矩的了)。OK,那就开始我们的界面布局吧。为了方便观察,我在每个单元格里标注上他们的编号:首先看Quit按钮,它起始于(0,0),横跨3个单元格,也就是colSpan=3,所以:1m_Layout->addWidget(m_QuitButton,0,0,1,3);然后是“Centigrade”,这个Label起始于(1,0),横跨2个单元格,也就是colSpan=2,所以:2m_Layout->addWidget(m_CenLabel,1,0,1,2);然后是“Fahrenheit”,这个Label起始于(1,2
6、),它刚好占用1个单元格,所以没有rowSpan和colSpan(或者说rowSpan和colSpan都是1),所以:3m_Layout->addWidget(m_FahLabel,1,2);再然后是“0”这个Label,它起始于(2,0),纵越2个单元格,rowSpan=2,所以:4m_Layout->addWidget(m_Label,2,0,2,1);再然后是Slider,它起始于(2,1),纵越2个单元格,rowSpan=2,所以:1m_Layout->addWidget(m_Slider,2,1,2,1);再然后是LCDNumber,它起始于(2,2),占用一个单元格,所以:
7、2m_Layout->addWidget(m_LCDNumber,2,2);最后是Dial表盘,它起始于(3,2)占用一个单元格,所以:3m_Layout->addWidget(m_LCDNumber,3,2);OK,至此,我们的整个界面布局就完成了,鼓掌:-)跟使用水平布局管理器和垂直布局管理器的组合方式相比,使用栅格布局管理器只需要消耗一个布局管理器即可完成整个界面的布局。但是这种方式的一个最大的缺点是,需要事先精确设计好每个部件的位置和占