
5.3 栈部件QStackedWidget
栈部件QStackedWidget提供了一个管理窗口部件的栈,在某一时刻只有一个栈部件的子窗口部件可见。
下面,在Qt设计器中绘制一个具有两页的栈部件的GUI界面。
在Qt设计器中新建一个QWidget窗口部件widget。
选择“Widget Box”面板“Item Views(Item-Based)”中的“List Widget”,并将它拖放到widget窗口部件左侧,单击右键,选择“Edit items”菜单,添加两个选项“个人设置”和“系统设置”。
选择“Widget Box”面板Containers中的“Satcked Widget” 窗口部件,并将它拖放到顶层窗口部件中,调整栈部件的大小。
添加子窗口部件到栈部件,并将栈部件的当前页放置在一个网格布局管理器中(如图5-14所示)。
在栈部件上单击右键,在弹出的背景菜单中选择“Insert Page”|“After Current Page”,插入新的一页。
单击栈部件上的“箭头”按钮进入下一页,添加子窗口部件,并将当前页放置在一个网格布局管理器中(如图5-15所示)。

图5-14 栈部件的配置“个人设置”页

图5-15 栈部件的系统设置页
将顶级窗口部件widget放置在一个水平布局管理器中,并设置listWidget的sizePolicy的horizontalStretch值为“1”,设置statckedWidget的sizePolicy的horizontalStretch值为“2”。
现在,使用Qt设计器的信号/槽编辑器为listWidget和stackedWidget窗口部件关联信号和槽,操作步骤如下:
选择菜单“Edit”|“Edit Signals/Slots”或直接按快捷键“F4”,进入编辑信号/槽模式。
将鼠标移动到listWidget窗口部件(这时该窗口部件高亮显示),按下鼠标左键的同时将鼠标拖动到stackedWidget窗口部件(此时stackedWidget窗口部件也高亮显示,如图5-16所示),松开鼠标按键。这时候将出现“Configure Connection”对话框。

图5-16 stackedWidget高亮显示
在“Configure Connection”对话框选择相应的信号和槽(QListWidget:: currentRow Changed(int)关联到QStackedWidget::setCurrentIndex(int)),单击“确定”按钮。如图5-17所示。
现在,在Qt设计器中预览GUI界面,试着交替单击列表框的“个人设置”和“系统设置”。显示效果如图5-18所示。

图5-17 配置ListWidget和stackedWidgget的关联

图5-18 栈部件实例对话框
手写代码也可以实现上述的功能,在此省略。有兴趣的读者可以试着手写代码实现这个同样功能的栈部件。