分裂器QSplitter类提供了一个分裂器部件。和QBoxLayout类似,可以完成布局管理器的功能,但是包含在它里面的部件,默认是可以随着分裂器的大小变化而变化的。
比如一个按钮放在布局管理器中,它的垂直方向默认是不会被拉伸的,但是放到分裂器中就可以被拉伸。还有一点不同就是,布局管理器继承自QObject类,而分裂器却是继承自QFrame类,QFrame类又继承自QWidget类,也就是说分裂器拥有QWidget类的特性,它是可见的,而且可以像QFrame一样设置边框。它实现了分割窗口的功能,允许用户通过拖动它们之间的边界来控制子部件的大小。
下面通过实例演示QSplitter类的使用
在源文件“main.cpp”具体代码如下:
运行效果:
此实例中设定右部分分割窗口为可伸缩控件,
当整个对话框的宽度发生改变时,左部的文件编辑框宽度保持不变,右部的分割窗口宽度随整个对话框大小的改变进行调整。
调用setOpaqueResize(bool)方法用于设定分割窗口的分割条,
在拖曳时是否为实时更新显示,若设为true 则实时更新显示,若设为false 则在拖曳时只显示一条灰色的粗线条,在拖曳到位并释放鼠标后再显示分割条。默认设置为true。
调用setStretchFactor()方法用于设定可伸缩控件,
它的第1个参数用于指定设置的控件序号,控件序号按插入的先后次序从0起依次编号;
第2个参数为大于0的值,表示此控件为可伸缩控件。
splitterMain->setStretchFactor(1,1);
这里的“1”代表要设置的部件的索引,即第二个部件;“1”代表设置的拉伸因子,即这个部件在所有部件中的拉伸比率。
拉伸因子越大,当布局的空间发生变化时,该部件就会被拉伸得越多,以便填满所有的空间。在这种情况下,因为设置的拉伸因子为1,所以该部件不会被拉伸,也就是说它的大小将是固定的。
如果想让某些部件在空间变化时能够自动拉伸,可以给这些部件设置较高的拉伸因子。例如,splitterMain->setStretchFactor(1, 2); 就会让第二个部件的大小是第一个部件的两倍。