看了《C++ Gui Programming With Qt 4 2nd》第六章"布局管理器"的第三节"Splitters", 并且做了里面的例子, 感觉怎么跟书里面的图像很不相同. 特别是那些分界线, 存在是存在, 但是跟背景一模一样, 书上也没说明怎么处理分界线(可能后面有讲,这个我就不清楚了).
QSplitter * mainSplitter = new QSplitter(Qt::Horizontal);
QLabel *label = new QLabel(QObject::tr("A"));
QLabel *label2 = new QLabel(QObject::tr("B"));
mainSplitter->addWidget(label2);
mainSplitter->addWidget(label);
mainSplitter->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
mainSplitter->show();
在main方法里面写上上述代码, 运行后(注意看分界线, 看不到吧):
书里面是:
分界线方面的差距挺大的呢? 我查了一下, 原来是一条分界线是一个QSplitterHandle 类对象. 通过下面的一些代码, 我们可以统一修改分界线的样式.
mainSplitter->setStyleSheet("QSplitter::handle { background-color: black }"); //设置分界线的样式
mainSplitter->setHandleWidth(20); //设置分界线的宽度
加了上述两行代码后的效果如下:
分界线的背景颜色变为"黑色", 并且宽度变得很大, 看来上述代码是起到作用了. 如果有很多条分界线, 我们希望只修改第一条的分界线, 怎么办呢? 请看下面的一行代码:
QSplitterHandle *handle = mainSplitter->handle(1); //注意不是从0 索引开始, 如果找不到分界线, 将返回NULL.
通过上述代码, 我们可以取得B 和 A 之间的分界线. 值得注意的是, mainSplitter->handle(0) 是存在的, 但是无法对其进行处理. 为了验证我们是否真的获取B 和 A 之间的分界线的对象指针, 我们写上下面的代码:
if(handle)
{
handle->setFixedWidth(1);
}
效果如下:
我们把B 和 A 之间的分界线的宽度修改为1了. 如果你想让分界线失去拖动的功能, 你可以写上 handle->setDisabled(true); 使其无效. 上面的分界线明显偏向了B 那边, 并且离A 有点距离, 看来要做得完善点, 还要耗点功夫才行呢!
对于B 和 A 来说, 他们的本身的大小相对于整个窗口来说, 都是很小的. 这样就存在着一些多余的空间, 这些空间可以给B, 也可以给A, 或者两个平分. 对于B 和 A 各自空间大小的控制, 是通过 QSplitter 的 setStretchFactor 方法, 该方法的声明:
void setStretchFactor(int index, int stretch);
第一个参数index 是子微件的索引值, 从0 开始. 这里的话, B 是0, A 是1; 第二个参数 stretch 是拉伸系数, int 类型, 下面主要对stretch 的数值进行说明.
1. mainSplitter->setStretchFactor(0, -2);
效果如下,
B占据了所有多余的空间, 看来 stretch 的值如果为负整数, 那这个微件将占据最大的空间.
2. mainSplitter->setStretchFactor(0, -2);
mainSplitter->setStretchFactor(1, -4);
效果如下:
B 和 A 平分了空间, 看来stretch 如果是负整数就会尽可能的占据空间, 而不看负整数的大小, 把 -2 改为 -12, 结果一样的.
3. mainSplitter->setStretchFactor(0, 0);
mainSplitter->setStretchFactor(1, 0);
效果同第二.
4. mainSplitter->setStretchFactor(0, 0); //可以把这段注释掉, 效果一样
mainSplitter->setStretchFactor(1, 1);
效果如下:
5. mainSplitter->setStretchFactor(0, 4);
mainSplitter->setStretchFactor(1, 8);
效果如下:
6. mainSplitter->setStretchFactor(0, -4);
mainSplitter->setStretchFactor(1, 8);
效果如下,
从 1, 2 和 6 的测试效果可以看出, 拉伸系数为负整数的微件将占据最大的多余空间.
从3, 4 和 5 的测试效果来看, 就算我们不设置 B 或 A 的拉伸系数stretch, 他们内部也应该存在着一个默认拉伸系数值0. stretch为 0 的微件, 将把最大多余空间让给stretch 为正整数的微件. 如果有
分享到:
相关推荐
在Qt库中,QSplitter和QVBoxLayout是两种重要的布局管理工具,用于构建灵活且响应式的用户界面。本文将深入探讨这两个组件的工作原理、特点以及如何结合使用它们来实现一个拉伸布局的示例。 首先,QSplitter是一个...
在Qt库中,QSplitter是一个非常重要的组件,它允许用户动态地调整多个子窗口或小部件的大小。QSplitter被广泛用于构建灵活的用户界面,尤其在需要展示和操作多个视图或者数据源时。这篇教程将深入探讨QSplitter的...
在Qt框架中,QSplitter是一个非常有用的控件,它允许用户动态地调整窗口或小部件的大小。这个控件通常用于创建可调整布局的界面,例如,将一个窗口分割成两个或多个部分,每个部分可以显示不同的内容。在本文中,...
在PyQt5编程中,QSplitter是一个非常实用的部件,它允许用户通过拖动边界来调整子部件的大小,从而实现窗口的动态布局。QSplitter常用于创建可自定义大小的多面板界面,例如在文件管理器、IDE或其他需要分割视图的...
本文将深入探讨PyQt5中的QSplitter布局控件,这是一个动态的布局管理器,允许用户通过拖动边界来调整子控件的大小。 QSplitter控件在PyQt5中扮演着重要的角色,它能够根据用户的交互动态调整子控件的尺寸。当用户...
这个压缩包"Qt例程源代码QSplitter.7z"包含了与QSplitter相关的示例源代码,对于学习和理解QSplitter的使用非常有帮助。 QSplitter是Qt Widgets模块的一部分,它允许用户通过拖动分隔条来调整相邻小部件的大小。这...
在Qt框架中,QSplitter是一个非常有用的组件,它允许用户动态调整子窗口或小部件的大小。在本文中,我们将深入探讨如何自定义QSplitter及其手柄(QSplitterHandle),以实现分离器的嵌套和手柄样式的自定义。这通常...
在Qt库中,QSplitter是一个非常有用的组件,它允许用户动态调整窗口中子部件的大小。这个"QSplitter拉伸和QPushButton程序示例"很可能是为了展示如何结合使用QSplitter和QPushButton来实现一个具有用户交互性的界面...
本教程主要聚焦于使用PyQt5的QMainWindow类构建主窗体,并结合QSplitter来动态加载子窗体(QWidget类),同时实现一种导航栏抽屉效果。下面我们将详细探讨这些知识点。 1. **QMainWindow类**: QMainWindow是PyQt5...
在Qt库中,`QSplitter`是一个非常实用的组件,用于创建可调整大小的窗口区域,用户可以自由地分割和调整子窗口的大小。这个工具对于开发具有多个视图或者面板的应用程序非常有用,例如代码编辑器、电子邮件客户端...
在本教程中,我们将深入探讨如何使用Python 3.x和PyQt5库来构建一个具有QMainWindow类的主窗体,并在其中集成QSplitter组件,动态加载子窗体(QWidget类实例)。此外,我们还将了解如何实现一个具有导航栏抽屉效果的...
重点在于如何利用QMainWindow类作为主窗口,并通过QSplitter来动态加载子窗体(QWidget类)。此外,我们还将实现一个导航栏抽屉效果,增强用户交互体验。下面将详细解释这些关键知识点。 首先,QMainWindow是PyQt5...
QSplitter 分割窗口,这个代码只起到抛砖引玉的作用!
在本项目中,我们主要探讨如何使用Python3.x和PyQt5库来构建一个具有树形导航栏的主窗体,以及如何通过按钮驱动QSplitter动态加载多个子窗体。此外,还将介绍如何实现第3个子窗体的界面与业务逻辑分离,以提高代码的...
当用户在QToolBox中切换页面时,QSplitter可以动态加载或卸载相应的子窗体,以节省资源并提高性能。这通常涉及到`QStackedWidget`或`QMainWindow`的使用,它们可以帮助我们管理子窗体的生命周期和布局。 在Python...
Python3.x+Pyqt5实现主窗体里QToolBox导航栏抽屉效果和树形导航,以及主窗体里的分割器QSplitter用QToolBox导航栏抽屉效果动态载入子窗体。
标题中的“QSplitter.7z”表明这是一个使用7-Zip软件进行压缩的文件,文件名是“QSplitter”。由于没有提供详细的描述或标签,我们只能基于文件名推测其内容可能与Qt库中的QSplitter类有关。QSplitter是Qt框架下的一...
本文将深入探讨如何使用Python3.x和PyQt5通过QSplitter组件动态加载多个子窗体,并且重点讲解如何在第三个子窗体中实现界面与业务逻辑的分离。 QSplitter是PyQt5中的一个关键部件,它允许用户通过拖动分隔条来调整...
在本教程中,我们将深入探讨如何使用Python3.x和PyQt5库来构建一个主窗口,其中包含一个QSplitter组件,该组件可以动态加载多个子窗口。此外,我们还将特别关注如何在第三个子窗口中实现界面与业务逻辑的分离,以...
本项目利用Python3.x和PyQt5来创建一个主窗体,其中包含一个树形导航栏,通过按钮驱动QSplitter分割器动态加载多个子窗体。此外,第三个子窗体特别地实现了界面与业务逻辑的分离,这是一种最佳实践,有助于提高代码...