Qt布局之QStackedLayout

之前认识了QBoxLayout、QGridLayout和QFormLayout。接着来认识Qt布局家族的成员QStackedLayout,集齐四种布局就可以召唤神龙了。

前面三种布局都是在同一个平面上对窗口部件布局,而QStackedLayout可以看成是不同平面的布局,就好像布局的窗口是叠在一起的一样,你(在默认的模式下)只能看到最上层的那一个窗口。这种特性很适合用来实现切换子界面的功能。

QStackedLayout基本用法

QStackedLayout的使用也很简单,上栗子:

QStackedLayout通过addWidget将部件添加到布局,第一个添加到布局的下标为0,第二个添加到布局的下标为1,以此类推。还可以使用insertWidget将部件插入到中间。

要切换显示的部件使用setCurrentIndex(传入参数为下标),或者使用setCurrentWidget(传入参数为部件的指针)。设置当前部件就是将该部件置于栈顶。上例的运行结果如下图:

需要获取布局中的部件指针可以使用widget(传入下标),获取当前部件指针使用currentWidget(),获取当前下标使用currentIndex()。QStackedLayout的常用函数也就这么多了。

关于StackingMode

QStackedLayout默认情况下只有一个部件可见,但是QStackedLayout还有一种模式是布局中所有部件都可见,只不过currentWidget会被放在最上层。控制这个模式的属性就是StackingMode,只有两个取值StackOne和StackAll,顾名思义前者对应的是只有一个可见,后者是全部可见。将上例中的模式设置为StackAll:

为了看到效果将三个部件的宽度设置为不一样的,否者最上层挡住了其他部件,看起来和StackOne是一样的。程序运行效果如图: