热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

QSplitter使用详解

阅读《C++GUIProgrammingwithQt4,2ndEdition》第六章布局管理器中的第三节关于Splitters的内容,并尝试实现书中的示例,发现实际效果与书中描述存在差异,尤其是分界线部分。

在阅读《C++ GUI Programming with Qt 4, 2nd Edition》第六章“布局管理器”的第三节“Splitters”时,我按照书中的示例进行了实践,但发现实际效果与书中描述有很大不同,尤其是在分界线方面。

书中提到的分界线在实际运行中几乎不可见,因为它们的颜色和背景色完全一致。书中并未详细说明如何处理分界线(可能在后续章节中有介绍)。

以下是我在 main 方法中编写的代码:

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(); 

运行后,分界线几乎不可见:

而书中的效果是:

分界线的差异非常明显。经过查阅资料,我发现分界线实际上是由 QSplitterHandle 类对象表示的。通过以下代码可以修改分界线的样式:

mainSplitter->setStyleSheet("QSplitter::handle { background-color: black }"); // 设置分界线的样式 mainSplitter->setHandleWidth(20); // 设置分界线的宽度 

添加上述代码后的效果如下:

分界线的背景颜色变为黑色,并且宽度显著增加,说明代码生效了。如果有多个分界线,我们可以通过以下代码单独修改某一条分界线的样式:

QSplitterHandle *handle = mainSplitter->handle(1); // 注意索引从1开始,如果找不到分界线,将返回NULL if (handle) { handle->setFixedWidth(1); } 

效果如下:

可以看到,B 和 A 之间的分界线宽度被设置为1。如果想禁用分界线的拖动功能,可以使用 `handle->setDisabled(true);`。

对于 B 和 A 的大小控制,可以通过 QSplitter 的 `setStretchFactor` 方法实现。该方法的声明如下:

void setStretchFactor(int index, int stretch); 

第一个参数 `index` 是子控件的索引值,从0开始。这里 B 是0,A 是1;第二个参数 `stretch` 是拉伸系数,类型为 int。以下是一些具体的测试案例:

1. `mainSplitter->setStretchFactor(0, -2);`

效果如下:

B 占据了所有多余的空间,说明拉伸系数为负整数的控件将占据最大的空间。

2. `mainSplitter->setStretchFactor(0, -2);`
`mainSplitter->setStretchFactor(1, -4);`

效果如下:

B 和 A 平分了空间,说明拉伸系数为负整数的控件会尽可能占据空间,而不考虑负整数的具体值。

3. `mainSplitter->setStretchFactor(0, 0);`
`mainSplitter->setStretchFactor(1, 0);`

效果同第2个案例。

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个测试案例可以看出,即使不设置某个控件的拉伸系数,其默认值也为0。拉伸系数为0的控件会将多余的空间让给拉伸系数为正整数的控件。


推荐阅读
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • 深入解析Java中的空指针异常及其预防策略
    空指针异常(NullPointerException,简称NPE)是Java编程中最常见的异常之一。尽管其成因显而易见,但开发人员往往容易忽视或未能及时采取措施。本文将详细介绍如何有效避免空指针异常,帮助开发者提升代码质量。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • Java 中的等时日期(int,int)方法,示例 ... [详细]
  • 本文将深入探讨 iOS 中的 Grand Central Dispatch (GCD),并介绍如何利用 GCD 进行高效多线程编程。如果你对线程的基本概念还不熟悉,建议先阅读相关基础资料。 ... [详细]
  • VB.net 进程通信中FindWindow、FindWindowEX、SendMessage函数的理解
    目录一、代码背景二、主要工具三、函数解析1、FindWindow:2、FindWindowEx:3、SendMessage: ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 在Python中,是否可以通过使用Tkinter或ttk库创建一个具有自动换行功能的多行标签,并使其宽度能够随着父容器的变化而动态调整?例如,在调整NotePad窗口宽度时,实现类似记事本的自动换行效果。这种功能在设计需要显示长文本的对话框时非常有用,确保文本内容能够完整且美观地展示。 ... [详细]
  • 深入解析 Android TextView 中 getImeActionLabel() 方法的使用与代码示例 ... [详细]
author-avatar
为了未来而奋斗2010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有