当前位置: 首页 > news >正文

Qt应用开发(基础篇)——拆分器窗口 QSplitter QSplitterHandle

一、前言

        QSplitter继承于QFrame,QFrame继承于QWidget,是Qt的一个部件容器工具类。

        框架类QFrame介绍

        QSplitter拆分器,用户通过拖动子部件之间的边界来控制子部件的大小,在应用开发中数据分模块展示图片展示等场景下使用。

二、QSplitter类

1、childrenCollapsible        

        该属性表示用户是否可以将子部件的大小调整为0,默认为true,子节点是可折叠的。使用setCollapsible()来启用和禁用单个子节点的折叠。使用isCollapsible读取单个子节点的可折叠使能。

bool childrenCollapsible() const            
void setChildrenCollapsible(bool)
bool isCollapsible(int index) const
void setCollapsible(int index, bool collapse)

2、handleWidth

        该属性表示分离器手柄操作的宽度。

int handleWidth() const
void setHandleWidth(int)

 3、opaqueResize

        该属性表示在交互式移动拆分器时是否要动态调整小部件的大小,默认为true。

bool opaqueResize() const
void setOpaqueResize(bool opaque = true)

4、orientation

        该属性表示分离器方向。

Qt::Orientation orientation() const
void setOrientation(Qt::Orientation)

5、公共方法

1)获取子部件数量

int count() const

2)增加子部件

        使用addWidget()增加子部件,插入到尾部。

void addWidget(QWidget *widget)

3)插入子部件

        使用insertWidget把子部件插入到指定的索引位置,如果索引位置超出范围,那么插入到尾部。

 void insertWidget(int index, QWidget *widget)

4)查找子部件

        使用indexOf()查找子部件所在的索引,如果不存在则返回-1。

int indexOf(QWidget *widget) const

5)替换子部件

        使用replaceWdiget()替换某索引下的部件。如果索引index无效,那么返回一个null指针。

QWidget *replaceWidget(int index, QWidget *widget)

6)获取子部件

        使用widget()传入索引返回部件指针,如果索引无效,则返回null指针。

QWidget *widget(int index) const

7)保存/恢复布局

        使用saveState()保存当前布局状态,返回一个QbyteArray。

        使用restoreState()传入saveState()返回的QbyteArray恢复布局状态,返回true,如果参数不合法,返回false。

QByteArray saveState() const
bool restoreState(const QByteArray &state)

8)保存/设置部件大小

        使用size()返回子部件的高度/宽度。

        使用setSizes()设置子部件的高度/宽度。如果是QSplitter横向布局则设置宽度,纵向布局则为设置高度。如果list的个数大于子部件个数,那么多余的将被忽略,如果是太少,那么设置失败。如果设置的尺寸加起来大于或者小于QSplitter的尺寸,那么将根据权重重新分配。

void setSizes(const QList<int> &list)
QList<int> sizes() const

9)设置子部件拉伸因子

        使用setStretchFactor设置子部件的拉伸因子。

void setStretchFactor(int index, int stretch)

示例:

int index = 0;
int stretch = 1;
splitter->setStretchFactor(index,stretch);
//相当于
QWidget *widget = splitter->widget(index);
QSizePolicy policy = widget->sizePolicy();
policy.setHorizontalStretch(stretch);
policy.setVerticalStretch(stretch);
widget->setSizePolicy(policy);

10)获取手柄

        返回分离器的手柄,手柄信息封装在QSplitterHandle中。

QSplitterHandle * handle(int index) const

6、信号

        分离器手柄按下操作拉伸的时候触发。

void splitterMoved(int pos, int index)

 三、QSplitterHandle类

        QSplitter分离器创建之后,会自带一个QSplitterHandle手柄功能,QSplitterHandle继承于QWidget,所以可以使用重写paintEvent来自定义它的样式。

        手柄提供了opaqueResize()和setOrientation()方法,用来读取和设置是否分离器滑动的时候动态调整部件大小,还有orientation()和setOrientation()方法,读取和设置分离器布局方向。

1、自定义分离器

        自定义mySplitter和mySplitterHandle类,mySplitter重新实现createrHandle,mySplitterHandle重新实现paintEvent。

源码

//创建自定义QSplitter
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QTextEdit *pLeftEdit = new QTextEdit("left",this);QTextEdit *pTopEdit = new QTextEdit("top",this);QTextEdit *pBottomEdit = new QTextEdit("bottom",this);mySplitter *mainSpliter = new mySplitter(Qt::Horizontal,this);mySplitter *rightSpliter = new mySplitter(Qt::Vertical,this);mainSpliter->setHandleWidth(20);rightSpliter->setHandleWidth(20);rightSpliter->addWidget(pTopEdit);rightSpliter->addWidget(pBottomEdit);mainSpliter->addWidget(pLeftEdit);mainSpliter->addWidget(rightSpliter);mainSpliter->setFixedSize(QSize(500,400));mainSpliter->move(100,100);mainSpliter->setStretchFactor(0,1);mainSpliter->setStretchFactor(1,3);
}//重新实现QSplitter
QSplitterHandle *mySplitter::createHandle()
{return new mySplitterHandle(orientation(),this);
}
//重新实现QSplitterHandle
void mySplitterHandle::paintEvent(QPaintEvent *event)
{QPainter painter(this);QLinearGradient gradient;if (orientation() == Qt::Horizontal) {gradient.setColorAt(0, Qt::red);gradient.setColorAt(1, Qt::white);gradient.setStart(rect().left(), rect().height()/2);gradient.setFinalStop(rect().right(), rect().height()/2);} else {gradient.setColorAt(0, Qt::green);gradient.setColorAt(1, Qt::white);gradient.setStart(rect().width()/2, rect().top());gradient.setFinalStop(rect().width()/2, rect().bottom());}painter.fillRect(event->rect(), QBrush(gradient));
}

 

相关文章:

Qt应用开发(基础篇)——拆分器窗口 QSplitter QSplitterHandle

一、前言 QSplitter继承于QFrame&#xff0c;QFrame继承于QWidget&#xff0c;是Qt的一个部件容器工具类。 框架类QFrame介绍 QSplitter拆分器&#xff0c;用户通过拖动子部件之间的边界来控制子部件的大小&#xff0c;在应用开发中数据分模块展示、图片展示等场景下使用。 二、…...

屏幕尺寸单位 px、em、rem区别

1、px是屏幕设备物理上能显示出的最小的一个点&#xff0c;这个点不是固定宽度的&#xff0c;不同设备上点的长宽、比例有可能会不同。假设&#xff1a;1号显示器上1px宽1毫米&#xff0c;但2号显示器1px宽两毫米&#xff0c;那么定义一个div宽度为100px&#xff0c;1号显示器上…...

yo!这里是STL::list类简单模拟实现

目录 前言 重要接口实现 框架 默认成员函数 迭代器&#xff08;重点&#xff09; 1.引言 2.list迭代器类实现 3.list类中调用实现 增删查改 后记 前言 我们知道&#xff0c;stl中的vector对应数据结构中的顺序表&#xff0c;string类对应字符串&#xff0c;而今天要…...

小程序商城开发制作

当开发一个商城小程序时&#xff0c;费用是一个非常重要的考虑因素。然而&#xff0c;准确回答这个问题是有一定困难的&#xff0c;因为开发商城小程序的费用取决于多个因素。以下是一些可能影响价格的主要因素&#xff1a; 1. 功能需求&#xff1a;商城小程序的复杂程度和功能…...

并发编程面试题2

并发编程面试题2 一、AQS高频问题&#xff1a; 1.1 AQS是什么&#xff1f; AQS就是一个抽象队列同步器&#xff0c;abstract queued sychronizer&#xff0c;本质就是一个抽象类。 AQS中有一个核心属性state&#xff0c;其次还有一个双向链表以及一个单项链表。 首先state…...

关于eclipse导入部署具有增删改查的项目

目录 前言&#xff1a;当我们刚刚进入公司的第一步就是去部署当前公司的项目&#xff0c;本博客就是详细介绍怎么去部署当前公司的项目。 一&#xff0c;开发工具&#xff1a; 二&#xff0c;具体步骤&#xff1a; 2.1导入公司的项目 打开eclipse开发工具 2.2配置当前的环…...

c++日志工具之——log4cpp

1、log4cpp概述 Log4cpp是一个开源的C类库&#xff0c;它提供了C程序中使用日志和跟踪调试的功能&#xff0c;它的优点如下&#xff1a; 提供应用程序运行上下文&#xff0c;方便跟踪调试&#xff1b; 可扩展的、多种方式记录日志&#xff0c;包括命令行、文件、回卷文件、内…...

ES索引重建reindex详解

目录 一、使用场景 二、reindex介绍 三、使用手册 1、覆盖更新 2、创建丢失的文档并更新旧版本的文档 3、仅创建丢失的文档 4、冲突处理 5、source中添加查询条件 6、source中包含多个源索引 7、限制处理的记录数 8、从远程ES集群中重建索引 9、提取随机子集 10、…...

前沿分享-中距离射频取电

目前来看&#xff0c;微能源有四种技术路线&#xff0c;一是环境光采集、温差转换采集、无线射频采集和振动能量采集。 无线射频微能源是在通信设备通信过程中自然产生的&#xff0c;可以通过射频能量芯片实现无线射频取电&#xff0c;能瞬间大功率储电和安全驱动负载。 通过射…...

UnrealEngine - 网络同步之连接篇

1 连接过程 - 握手 传统的 C/S 架构下&#xff0c;Client 和 Server 通常会建立一条抽象的 Connection&#xff0c;用来进行两端的通信。 UE 的官方文档中提供了 Client 连接到 Server 的示例 &#xff0c;简单来说分为如下几步&#xff1a; 打包构建好 Client 和 Server 进程…...

【JDBC系列】- 扩展提升学习

扩展提升学习 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#xff0…...

阻塞和非阻塞,同步和异步

文章目录 典型的一次IO的两个阶段IO多路复用是同步还是异步&#xff1f; 典型的一次IO的两个阶段 数据就绪和数据读写 同步&#xff1a;需要应用程序自己操作 IO多路复用是同步还是异步&#xff1f; epoll也是同步的 具体数据读取还是通过应用程序自己完成的 只有使用了特…...

提速Rust编译器!

Nethercote是一位研究Rust编译器的软件工程师。最近&#xff0c;他正在探索如何提升Rust编译器的性能&#xff0c;在他的博客文章中介绍了Rust编译器是如何将代码分割成代码生成单元&#xff08;CGU&#xff09;的以及rustc的性能加速。 他解释了不同数量和大小的CGU之间的权衡…...

QT创建项目

可选择CMake或qmake...

基于vue3+webpack5+qiankun实现微前端

一 主应用改造&#xff08;又称基座改造&#xff09; 1 在主应用中安装qiankun(npm i qiankun -S) 2 在src下新建micro-app.js文件&#xff0c;用于存放所有子应用。 const microApps [// 当匹配到activeRule 的时候&#xff0c;请求获取entry资源&#xff0c;渲染到containe…...

华为OD真题--完美走位--带答案

2023华为OD统一考试&#xff08;AB卷&#xff09;题库清单-带答案&#xff08;持续更新&#xff09;or2023年华为OD真题机考题库大全-带答案&#xff08;持续更新&#xff09; 题目描述 输入一个长度为4的倍数的字符串Q,字符串中仅包含WASD四个字母。 将这个字符串中的连续子串…...

【AI】《动手学-深度学习-PyTorch版》笔记(十四):多层感知机

AI学习目录汇总 1、多层感知机网络结构 1.1 线性模型:softmax回归 在前面介绍过,使用softmax回归来处理分类问题时,每个输出通过都一个仿射函数计算,网络结构如下,输入和输出之间为全链接层: 1.2 多层感知机 多层感知机就是在输入和输出中间再添加一个或多个全链接…...

本地开发 npm 好用的http server、好用的web server、静态服务器

好用的web server总结 有时需要快速启动一个web 服务器&#xff08;http服务器&#xff09;来伺服静态网页&#xff0c;安装nginx又太繁琐&#xff0c;那么可以考虑使用npm serve、http-server、webpack-dev-server。 npm serve npm 的serve可以提供给http server功能&#…...

Gradio入门,并搭个鸡兔同笼问题小应用,附源码(MindOpt)

应用链接&#xff1a; https://979427749bc9ceec34.gradio.live 是公开访问链接&#xff0c;3天有效。 在modelscope中的创空间发布长期有效:https://modelscope.cn/studios/wuyoy520v01/MindOpt_Chicken-with-rabbit-cage/summary。 应用图如下&#xff0c;源代码见正文。 知…...

redis核心知识点简略笔记

value数据类型 string 二进制安全 list 有序、可重复 set 无序、不重复 hash field-value的map sorted set 不重复、通过double类型score分数排序 场景 string 计数器缓存分布式锁访问频率控制分布式session hash 购物车等对象属性灵活修改 list 定时排行榜 set 收藏 sorte…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...