Qt"Splitters"和setStretchFactor用法详解
2016-01-12 17:20
821 查看
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 之间的分界线的对象指针, 我们写上下面的代码:
splitterMain->setStyleSheet("QSplitter::handle { background-color: black }"); //设置分界线的样式
splitterMain->setHandleWidth(1); //设置分界线的宽度
QSplitterHandle *handle = splitterMain->handle(1); //注意不是从0 索引开始, 如果找不到分界线, 将返回NULL.
if (handle)
{
handle->setFixedWidth(1);
}
QSplitterHandle *handle1 = splitterRight->handle(1); //注意不是从0 索引开始, 如果找不到分界线, 将返回NULL.
if (handle1)
{
splitterRight->setStyleSheet("QSplitter::handle { background-color: black }"); //设置分界线的样式
handle1->setFixedWidth(1);
}
对于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 为正整数的微件, 他们的多余空间的占有率由通过数字的比例来确定的.
//主分割窗口
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 之间的分界线的对象指针, 我们写上下面的代码:
splitterMain->setStyleSheet("QSplitter::handle { background-color: black }"); //设置分界线的样式
splitterMain->setHandleWidth(1); //设置分界线的宽度
QSplitterHandle *handle = splitterMain->handle(1); //注意不是从0 索引开始, 如果找不到分界线, 将返回NULL.
if (handle)
{
handle->setFixedWidth(1);
}
QSplitterHandle *handle1 = splitterRight->handle(1); //注意不是从0 索引开始, 如果找不到分界线, 将返回NULL.
if (handle1)
{
splitterRight->setStyleSheet("QSplitter::handle { background-color: black }"); //设置分界线的样式
handle1->setFixedWidth(1);
}
对于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 为正整数的微件, 他们的多余空间的占有率由通过数字的比例来确定的.
相关文章推荐
- Creo/Proe 二次开发中使用 QT 编程流程
- Qt学习(18)
- (转载)QT中PRO文件写法的详细介绍,很有用,很重要!
- QT 读写XML
- QT读写XMl
- qtcreator +vs2013 开发xp下使用的程序
- 搭建QT和VS2010集成开发环境
- Qt中qss的使用
- Qt标准对话框之QMessageBox
- QT中 QT_BEGIN_NAMESPACE、QT_END_NAMESPACE的应用介绍!!
- QT学习之路
- Qt容器遍历
- qt串口编程
- QT注册自定义类型
- QtCreator调试设置(CDB调试设置)
- Qt & arm 中文乱码
- VS2010 + Cmake + Qt4.8 简单的环境搭建实例。
- Qt使用教程之创建移动应用程序(三)
- Qt学习:再次理解隐式共享
- Qt 常用命令,宏,pro文件格式