详细描述
分割器让用户可以用过拖拽子窗口的分界线,来调整各个子窗口的大小。一个分割器可以控制任意数量个widget。分割器典型的用法是创建几个widget,然后用insertWidget()或addWidget()方法添加到分割器。
下面的例子将显示 QListView, QTreeView, and QTextEdit并排,并有两个拆分句柄:
QSplitter *splitter = new QSplitter(parent);
QListView *listview = new QListView;
QTreeView *treeview = new QTreeView;
QTextEdit *textedit = new QTextEdit;
splitter->addWidget(listview);
splitter->addWidget(treeview);
splitter->addWidget(textedit);
如果一个widget已经存在于分割器内,当insertSidget()或addWidget()被调用时,会重新移动该widget的位置。这可以用于在分割器中重新排列这些widget。可以使用indexOf(), widget(), 和 count()方法,来访问分割器内的widget。
默认的分割器水平排布它的子部件,可以通过setOrientation(Qt::Vertical)使分割器改为垂直布局子部件。
默认情况下,分割器内的所有widget都可以在其 minimumSize() 和 maximumSize()之间,根据用户意愿任意调整大小。
默认情况下,分割器会动态的调整子部件的大小。如果希望分割器仅在调整大小操作结束时,才调整子部件的大小,通过调用setOpaqueResize(false)来实现。
分割器内各widget之间的初始大小分布是通过将初始大小乘以拉伸系数来确定的。可以用setSize()方法来设置所有widget的大小。sizes()方法返回用户设置的size列表。或者,可以分别使用saveState()和restoreState()从QByteArry保存和恢复widget的大小。
当使用hide()方法隐藏子元素时,它的空间会被重新分配给其他的子元素。在你重新show()时,它将被恢复。
**注:**不允许添加QLayout对象到分割器内(包括使用setLayout()方法,或者设置分割器的父类是QLayout对象),请使用addWiget()方法代替。参考上面的例子
属性说明
源码如下
Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation)
Q_PROPERTY(bool opaqueResize READ opaqueResize WRITE setOpaqueResize)
Q_PROPERTY(int handleWidth READ handleWidth WRITE setHandleWidth)
Q_PROPERTY(bool childrenCollapsible READ childrenCollapsible WRITE setChildrenCollapsible)
childrenCollapsible : bool
该属性用于确定用户是否可以将子部件的大小设置到0。
默认情况下,子部件是可折叠的(即大小可以被设置为0)。使用setCollapsible()方法来启用或禁用子部件是否可折叠。
bool childrenCollapsible() const
void setChildrenCollapsible(bool)
handleWidth : int
该属性用于确定分割线的宽度
默认情况下,该属性的值,取决于用户的平台和样式首选项的值。
如果将handleWidth设置为1或0,则实际抓取区域将增长到重叠其各自小部件的几个像素。
int handleWidth() const
void setHandleWidth(int)
opaqueResize : bool
标识在拖拽分割线时,子窗口是否动态调整大小。
默认的调整大小行为以来于样式(由SH_Splitter_OpaqueResize样式提示决定)。但是,可以通过调用setOpaqueResize()来覆盖它。
bool opaqueResize() const
void setOpaqueResize(bool opaque = true)
orientation : Qt::Orientation
该属性确定分割器的方向
默认时水平的。通过设置为 Qt::Horizontal 和Qt::Vertical来改变其布局方向。
Qt::Orientation orientation() const
void setOrientation(Qt::Orientation)
部分成员函数
setStretchFactor:设置widget的拉伸系数
以下代码,第一个widget占分割器大小的2/9,第二个占7/9。
QSplitter* mainSplitter = new QSplitter(Qt::Horizontal);//新建水平分割器
QListView *listview = new QListView;
QTreeView *treeview = new QTreeView;
splitter->addWidget(listview);
splitter->addWidget(treeview);
splitter->setStretchFactor(0, 2); // 设置第一个窗口的拉伸系数为2/9
splitter->setStretchFactor(1, 7); //
QWidget *QSplitter::replaceWidget(int index, QWidget *widget)
使用给定的widget替换分割器内的对应index的widget。
如果index有效且widget不是该分割器的子部件,返回被替换的widget对象。否则,将返回null,并且不进行替换或添加。
新的widget的几何形状,与被它替换的那个widget的几何形状相同,可见和崩溃属性,也会继承下来。