Qt"Splitters",分界线属性调整,控件大小比例调整示例:
//主分割窗口
QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0);
QTextEdit *textLeft = new QTextEdit(QObject::tr("Left Widget"), splitterMain);
textLeft->setAlignment(Qt::AlignCenter);
//右部分割窗口
QSplitter *splitterRight = new QSplitter(Qt::Vertical, splitterMain);
splitterRight->setOpaqueResize(false);
QTextEdit *textUp = new QTextEdit(QObject::tr("Top Widget"), splitterRight);
textUp->setAlignment(Qt::AlignCenter);
QTextEdit *textBottom = new QTextEdit(QObject::tr("Bottom Widget"), splitterRight);
分界线属性如何调整呢? 我查了一下, 原来是一条分界线是一个QSplitterHandle 类对象. 通过下面的一些代码, 我们可以统一修改分界线的样式.
mainSplitter->setStyleSheet("QSplitter::handle { background-color: black }"); //设置分界线的样式
mainSplitter->setHandleWidth(20); //设置分界线的宽度
分界线的背景颜色变为"黑色", 并且宽度变得很大, 看来上述代码是起到作用了. 如果有很多条分界线, 我们希望只修改第一条的分界线, 怎么办呢? 请看下面的一行代码:
QSplitterHandle *handle = mainSplitter->handle(1); //注意不是从0 索引开始, 如果找不到分界线, 将返回NULL.
通过上述代码, 我们可以取得Left 和 Bottom 之间的分界线. 值得注意的是, mainSplitter->handle(0) 是存在的, 但是无法对其进行处理. 为了验证我们是否真的获取Left 和 Bottom 之间的分界线的对象指针, 我们写上下面的代码:
对于Left和 Top 来说, 他们的本身的大小相对于整个窗口来说, 都是很小的. 这样就存在着一些多余的空间, 这些空间可以给Left, 也可以给Top, 或者两个平分. 对于Left 和 Top 各自空间大小的控制, 是通过 QSplitter 的 setStretchFactor 方法, 该方法的声明:
void setStretchFactor(int index, int stretch);
第一个参数index 是子微件的索引值, 从0 开始. 这里的话,Left是0, Top 是1; 第二个参数 stretch 是拉伸系数, int 类型, 下面主要对stretch 的数值进行说明.
1. splitterMain->setStretchFactor(0, 1);
2. splitterMain->setStretchFactor(1, 5);
效果如下,
拉伸系数为负整数的微件将占据最大的多余空间.
他们内部也应该存在着一个默认拉伸系数值0. stretch为 0 的微件, 将把最大多余空间让给stretch 为正整数的微件. 如果有多个stretch 为正整数的微件, 他们的多余空间的占有率由通过数字的比例来确定的.