热门标签 | 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的控件会将多余的空间让给拉伸系数为正整数的控件。


推荐阅读
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
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社区 版权所有