堆叠布局,同一时间只展示一个控件
画蓝框的地方就是一个堆叠布局,每当我点击右侧的按钮时都会换一个控件
目录
2.1 当前控件改变时触发 currentChanged()
1 基本操作
1.1 构造函数
- 使用QStackedLayout时,最好把self.setLayout(layout)放到添加控件之前
- QStackedLayout()
构造函数中可以什么都不放,然后在后面添加控件
- QStackedLayout(QWidget)
这个的意思是放一个父对象
就不展示了
- QStackedLayout(QLayout)
这个的意思也是放一个父对象,父对象可以是QLayout
就不展示了
1.2 添加子控件
addWidget是直接添加,不测试了
insertWidget()是插入指定位置,也是和直接添加差不多
- 由于控件堆叠在一起,所以看不出实际的效果
insertWidget()的返回值是插入的索引数
如果插入0还是显示最早加入的控件,但是插入后的索引数确实是0,然后设置之前0位的对象自动变为1
如果insertWidget()的参数索引值越界(超出控件数)了,会默认把控件放到最后
我们可以通过Widget获取指定索引的控件对象
现在我们获取索引为0的对象
为了验证是否正确,我们获取一下索引的text
1.3 切换
1.3.1 通过索引值切换
可以连接槽函数接一个按钮搞,我就直接用代码搞了
切换之前
现在我们切换为1号标签
1.3.1.2 获取切换的控件索引值 currentIndex()
1.3.2 通过控件切换
切换之前
切换为label2
1.3.2.2 获取切换控件对象 currentWidget()
1.4 展示模式
其中涉及到一个参数 QStackedLayout.StackingMode,可以填写的值为
- QStackedLayout.StackOne 只有当前小控件可见,默认值
- QStackedLayout.StackAll 所有小部件都可见,当前控件显示在最前
这个只和hide()有关
1.4.1 设置 setStackingMode()
设置前是这样的
我们现在隐藏标签
隐藏完标签1并没有显示标签2
我们现在设置展示模式
- setStackingMode()一定要位于hide()之前才有效
此时会显示标签2
当我们把标签1变小,也能看到后面的标签2
当然如果标签2变小了也是可以看到标签3的,就不在这测试了
1.4.2 获取 stackingMode()
2 信号
2.1 当前控件改变时触发 currentChanged()
会传递一个int,int为当前控件的索引
我们再搞一个按钮用于切换当前控件
这个按钮点一下就能切换一下
我们要把窗口分为两部分,要不然我的按钮就被覆盖了
现在窗口是这样的
我们点击一下按钮
2.2 控件被移除时触发 widgetRemoved()
会传递一个int,int为被移除控件的索引
我们换一下按钮的槽函数,当我按一下,它就会把label删除
现在我的窗口是这样的
我们现在点击一下按钮