Qt 详解QRubberBand
文章目录
- QRubberBand 简介
- 前言
- QRubberBand 的作用
- QRubberBand 的主要功能
- QRubberBand 的常用方法
- QRubberBand 的典型应用场景
- 示例代码
- 总结
QRubberBand 简介
前言
在 Qt 中,QRubberBand 是一个非常实用的控件,它通常用于图形界面中的“选择区域”功能。QRubberBand 是一个可视化的矩形框(通常是虚线框或实线框),用户可以通过拖动鼠标来创建一个区域,从而选择或标记屏幕上的某个区域。这个控件在许多应用中都非常有用,尤其是在需要选择或框选内容的场景中,例如图像编辑、文件管理器、数据可视化等。
本文将详细介绍 QRubberBand 的作用、主要功能以及典型的应用场景,帮助开发者更好地理解它的用途和实现方式。
QRubberBand 的作用
QRubberBand 主要用于在界面中显示一个可调整大小的矩形区域。用户可以通过拖动鼠标在窗口中选择一块区域,通常用虚线、实线或其他样式来突出显示。它为用户提供了一种直观的交互方式,广泛应用于需要框选区域或标记区域的场景。
QRubberBand 主要有两个功能:
- 显示选择框:为用户在界面中提供一个矩形框,用户通过拖动来选择区域。
- 动态调整大小:可以随时调整矩形的大小和位置,用于实时显示用户选择的区域。
就是桌面上的这个东西

常见的场景包括:
- 图像查看器中选定图像区域。
- 文件浏览器中选择多个文件的区域。
- 地图应用中选择一个地图区域。
QRubberBand 的主要功能
QRubberBand 类继承自 QWidget,可以通过设置不同的模式和样式来控制显示效果。它提供了多种方法来定制和操作矩形框。以下是 QRubberBand 的一些主要功能:
-
设置矩形形状和样式:
QRubberBand通过setGeometry()方法来设置矩形的大小和位置,同时可以设置矩形框的边框样式(如虚线或实线)。setStyle()方法允许开发者选择不同的样式,通常用于选择不同的边框类型。
-
显示和隐藏选择框:
QRubberBand提供了show()和hide()方法,开发者可以在需要时显示或隐藏选择框。
-
实时更新区域:
- 可以通过捕捉鼠标事件来动态调整选择框的大小和位置,实时更新用户的选择区域。
-
支持不同的选择区域模式:
QRubberBand可以创建矩形框(常见的选择区域模式),也可以自定义其他形状,如圆形或自由形状框。
-
与鼠标事件配合:
- 通常与鼠标拖动事件结合使用,用户按下鼠标并拖动时,
QRubberBand显示为一个矩形框,随着鼠标移动,矩形的大小和位置实时更新。
- 通常与鼠标拖动事件结合使用,用户按下鼠标并拖动时,
-
透明背景支持:
- 可以通过设置透明背景或半透明背景,让
QRubberBand仅显示矩形边框,而背景部分可以显示背景控件的内容。
- 可以通过设置透明背景或半透明背景,让
QRubberBand 的常用方法
以下是一些常见的 QRubberBand 方法,可以帮助开发者控制选择框的行为:
-
QRubberBand::QRubberBand(QRubberBand::Shape, QWidget *parent):- 构造函数,用于创建一个
QRubberBand对象。 Shape参数可以设置选择框的形状(如矩形)。parent参数是该控件的父窗口或父控件。
- 构造函数,用于创建一个
-
void setGeometry(const QRect &rect):- 设置矩形框的位置和大小。
rect参数指定矩形的区域。
-
void show()和void hide():- 显示或隐藏选择框。
-
void setStyle(QStyle::StyleHint style):- 设置选择框的边框样式。常见的样式有实线、虚线等。
-
QRubberBand::Shape shape():- 获取选择框的形状类型。
-
void setWindowOpacity(qreal level):- 设置选择框的透明度,通常用于控制选择框的背景透明度。
QRubberBand 的典型应用场景
QRubberBand 在许多需要用户交互选择区域的应用中都非常有用。以下是一些典型的应用场景:
-
图像编辑器:
- 在图像查看器或编辑器中,用户可以通过
QRubberBand来选择图像的一部分,进行剪切、复制或其他编辑操作。
- 在图像查看器或编辑器中,用户可以通过
-
文件管理器:
- 在文件浏览器中,用户可以通过矩形框选择多个文件或文件夹。
-
地图应用:
- 在地图应用中,
QRubberBand可以用于选择地图的某个区域,例如选择一个地理范围进行缩放或标记。
- 在地图应用中,
-
图形设计软件:
- 在矢量图形设计软件中,用户常常需要选择多个图形元素,
QRubberBand可以帮助用户进行区域选择。
- 在矢量图形设计软件中,用户常常需要选择多个图形元素,
-
数据可视化:
- 在数据可视化应用中,用户可以通过
QRubberBand选择数据区域进行详细查看或进一步分析。
- 在数据可视化应用中,用户可以通过
示例代码
以下是一个简单的 QRubberBand 使用示例,展示了如何在窗口中创建一个矩形选择框并实时更新其大小:
#include <QApplication>
#include <QWidget>
#include <QRubberBand>
#include <QMouseEvent>class RubberBandExample : public QWidget {Q_OBJECTpublic:RubberBandExample(QWidget *parent = nullptr) : QWidget(parent), rubberBand(QRubberBand::Rectangle, this) {rubberBand.setStyle(QStyle::SP_DialogSaveButton);rubberBand.setGeometry(0, 0, 0, 0); // 初始位置和大小}protected:void mousePressEvent(QMouseEvent *event) override {startPos = event->pos();rubberBand.setGeometry(QRect(startPos, QSize()));rubberBand.show();}void mouseMoveEvent(QMouseEvent *event) override {QRect newRect(startPos, event->pos());rubberBand.setGeometry(newRect);}void mouseReleaseEvent(QMouseEvent *event) override {rubberBand.hide(); // 松开鼠标时隐藏选择框}private:QRubberBand rubberBand;QPoint startPos;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);RubberBandExample window;window.resize(400, 300);window.show();return app.exec();
}
在这个示例中,鼠标按下时会显示一个矩形框,随着鼠标移动,矩形框会实时调整大小,松开鼠标时,选择框隐藏。
总结
QRubberBand 是 Qt 中一个非常有用的控件,用于实现矩形区域的选择功能。它通过提供简单的 API 来支持区域选择、动态调整、样式定制等功能,广泛应用于图像编辑、文件管理、数据可视化等领域。通过结合鼠标事件,QRubberBand 使得用户能够直观地选择和操作界面上的区域,增强了应用的交互性和可用性。
相关文章:
Qt 详解QRubberBand
文章目录 QRubberBand 简介前言 QRubberBand 的作用QRubberBand 的主要功能QRubberBand 的常用方法QRubberBand 的典型应用场景示例代码总结 QRubberBand 简介 前言 在 Qt 中,QRubberBand 是一个非常实用的控件,它通常用于图形界面中的“选择区域”功能…...
HTB:Love[WriteUP]
目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机开放端口进行脚本、服务扫描 使用浏览器访问靶机443端口 尝试利用该功能访问靶机自身80端口 使用ffuf对靶机80端口进行路径FUZZ 漏洞利用 使用searchsploit搜索靶机80端…...
【RabbitMQ 消息列队测试之:调试技巧】
RabbitMQ 消息列队测试之:调试技巧 1. 使用 RabbitMQ 管理界面2. 启用日志记录3. 使用 `rabbitmqctl` 命令行工具4. 检查和分析死信队列(DLQ)5. 监控系统资源6. 性能测试工具:`rabbitmq-perf-test`7. 使用工具调试消息内容8. 检查和调整消费者处理速率9. 启用长时间运行的测…...
Ubuntu FTP服务器的权限设置
在Ubuntu中设置FTP服务器的权限,主要涉及到用户权限管理和文件系统权限设置。以下是详细的步骤和配置方法: 安装FTP服务器软件 首先,确保已经安装了FTP服务器软件。常用的FTP服务器软件包括vsftpd和Pure-FTPd。以下是使用vsftpd作为示例的安…...
@Pattern (用于校验字符串是否符合特定正则表达式)
Pattern 是一个用于校验字符串是否符合特定正则表达式的注解,它在 Java 中常用于验证输入数据的格式。以下是 Pattern 注解的详解和使用方法: 含义 Pattern 注解用于在 Java 中对字段进行注解,以确保其值与指定的正则表达式匹配。这个注解可…...
5G学习笔记之随机接入
目录 1. 概述 2. MSG1 2.1 选择SSB 2.2 选择Preamble Index 2.3 选择发送Preamble的时频资源 2.4 确定RA-RNTI 2.5 确定发送功率 3. MSG2 4. MSG3 5. MSG4 6. 其它 6.1 切换中的随机接入 6.2 SI请求的随机接入 6.3 通过PDCCH order重新建立同步 1. 概述 随机接入…...
webGL入门教程_03GLSL、OpenGL、WebGL 定义及关系
GLSL、OpenGL、WebGL 定义及关系 1. 定义 1.1 GLSL(OpenGL Shading Language) 定义: GLSL 是 OpenGL 的着色器语言,用于编写 GPU 可编程着色器,定义图形渲染过程中顶点和像素(片元)的处理逻辑。…...
git基本操作说明
一 基本操作说明 Git常用命令: clone、push、add、commit、checkout、pull。 流程如下: 仓库说明: workspace:工作区staging area:暂存区/缓存区local repository:版本库或本地仓库remote repository&…...
微知-git如何添加空目录的几种方式?(.gitkeep, githook, gitconfig)
背景 在Git中,空目录(空文件夹)默认是不会被跟踪的,因为Git主要跟踪文件的变化。但是如何让git添加空目录? #mermaid-svg-3Y4NksLyEeuMs4FC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-si…...
MySQL 数据库学习教程一:开启数据库探索之旅
在当今数字化时代,数据已然成为企业和组织最为宝贵的资产之一。而数据库管理系统则是存储、管理和操作这些数据的核心工具。MySQL 作为一款广泛应用的开源关系型数据库管理系统,以其可靠性、高性能和易用性而备受青睐。如果你渴望踏入数据库领域…...
Vue+Elementui el-tree树只能选择子节点并且支持检索
效果: 只能选择子节点 添加配置添加检索代码 源码: <template><div><el-button size"small" type"primary" clearable :disabled"disabled" click"showSign">危险点评估</el-button>…...
Lumos学习王佩丰Excel第十八讲:LOOKUP函数与数组
一、回顾统计函数 1、使用SUMIF函数 sumif(条件区域,求和条件,求和区域) 2、使用SUMIFS函数 SUMIFS(求和范围, 条件范围1, 条件1, 条件范围2, 条件2, ...) 二、认识数组 1、数组生成原理 所谓数组,是有序的元素序列。组成数组的各个变量称为数组的元素。对于Ex…...
Git的基本使用操作
文章目录 Git 全局配置基本操作Git 常用命令版本回退根据版本号回滚分支远端分支 🏡作者主页:点击! 🤖Git专栏:点击! ⏰️创作时间:2024年12月1日12点50分 Git 全局配置 虽然说是全局配置&am…...
【C语言】结构体嵌套
结构体嵌套是指在一个结构体中定义另一个结构体作为其成员。这种方式可以实现更复杂的数据结构设计,便于对数据进行分层管理和组织,广泛应用于实际开发中,例如操作系统内核、嵌入式系统、网络协议解析等。下面是对结构体嵌套的详细介绍&#…...
PDF view | Chrome PDF Viewer |Chromium PDF Viewer等指纹修改
1、打开https://www.browserscan.net/zh/ 2、将internal-pdf-viewer改为 internal-pdf-viewer-jdtest看下效果: 3、源码修改: third_party\blink\renderer\modules\plugins\dom_plugin_array.cc namespace { DOMPlugin* MakeFakePlugin(String plugin_…...
maxun爬虫工具docker搭建
思路来源开源无代码网络数据提取平台Maxun 先把代码克隆到本地(只有第一次需要) git clone https://github.com/getmaxun/maxun.git 转到maxun目录 cd maxun 启动容器 docker-compose --env-file .env up -d 成功启动六个容器 网址 http://local…...
JAVAWeb之javascript学习
1.js引入方式 1. 内嵌式:在head中,通过一对script标签引入JS代码;cript代码放置位置有一定的随意性,一般放在head标签中;2.引入外部js文件 在head中,通过一对script标签引入外部JS代码;注意&…...
vue3中是如何实现双向数据绑定的
在 Vue 3 中,双向数据绑定主要通过 v-model 指令实现。v-model 是一个语法糖,它内部实际上结合了 v-bind 和 v-on 指令来实现数据的双向绑定。下面详细介绍 Vue 3 中双向数据绑定的实现原理和使用方法。 双向数据绑定的基本原理 v-bind 指令࿱…...
JavaScript事件机制详解
JavaScript中的事件模型是指当用户与网页进行交互时,浏览器会触发不同类型的事件,开发者可以通过添加事件监听器来响应这些事件。事件流是描述事件在页面元素中传播的过程,从窗口对象开始,逐级向下传播到最具体的元素,…...
k8s运行运行pod报错超出文件描述符表限制
1.问题描述 运行pod超过文件描述符表 unable to allocate file descriptor table - out of memory/opt/COMMAND.sh: line 9: 2.查看设备的文件描述符限制 操作前一定要先查询这个值,2097152这个值即为我们可设置的最大值,超过这个值后将无法登录&am…...
MyBatis 二级缓存脏读真实原因
很多同学熟悉 MyBatis 一级缓存、二级缓存基础用法,但多表联查、跨Mapper更新场景下的缓存脏读漏洞,90%的人都会踩坑。 本文结合完整实战案例,用大白话拆解:脏读如何产生、一级缓存二级缓存双重隐患、Namespace隔离缺陷࿰…...
【Gemini赋能Google Meet实时字幕】:2024企业级会议无障碍升级的5大落地陷阱与避坑指南
更多请点击: https://intelliparadigm.com 第一章:Gemini赋能Google Meet实时字幕的技术演进与企业价值定位 Google Meet 的实时字幕能力已从早期基于传统语音识别(ASR)的静态模型,跃迁至由 Gemini 多模态大模型深度驱…...
Vivado 2023.1 与 Questasim 2024.1 协同仿真环境搭建全攻略
1. 环境准备:安装与版本确认 在开始搭建Vivado 2023.1与QuestaSim 2024.1的协同仿真环境前,首先要确保两个软件都已正确安装。我最近在搭建这个环境时发现,新版本对系统环境的要求比旧版本更严格。建议使用Windows 10 64位专业版或企业版&…...
Hello-Agents 实战指南 —— 从零开始构建你的第一个 AI 智能体
“如何从零构建一个 AI 智能体?” 这是很多开发者入门 Agent 开发时面临的第一个难题。市面上的框架层出不穷,但大多依赖复杂的封装与配置,初学者往往在环境搭建阶段就望而却步。Hello-Agents 项目的出现,打破了这一壁垒。作为面向…...
别再只当SIM卡用了!用Python脚本和APDU命令,带你亲手“解剖”手机卡里的文件系统
用Python和APDU命令探索USIM卡文件系统的实战指南 当你把手机卡插入设备时,它不仅仅是一个身份标识——实际上,这是一套完整的微型操作系统。本文将带你用Python脚本和APDU命令,像安全研究员一样亲手探索USIM卡内的文件系统结构。 1. 准备工作…...
2026 极简环境搭建:使用 Miniconda + pip-tools 锁定 PyTorch 生态依赖全链路方案
前言:一个被依赖管理“毒打”过的故事 不知道你是否有过这样的经历——花了一整天终于把模型训练跑通,隔了一周想在同一台机器上复现结果,环境居然崩了。一通排查才发现,某个依赖偷偷升了一个小版本,API 变了,训练逻辑静默出错。更崩溃的是,把代码交给同事,他花了三个…...
医疗建筑粘滞阻尼器减震性能遗传算法优化设计【附模型】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅如需沟通交流,点击《获取方式》 (1)多目标优化模型与非线性阻尼参数化: 针对…...
Claude 4.6 Opus 算力升级:中小企业 AI 混合部署最佳实践
2026 年 5 月,随着 SpaceX 与 Anthropic 算力合作的正式落地,Claude 4.6 Opus 的服务稳定性和并发处理能力得到了质的提升,同时 Anthropic 维持了 Claude Pro 用户免费使用 Opus 的权益不变,dd.zzmax.cn 已整理了针对中小企业的 C…...
DNS 服务器学习笔记:核心总结与实验指南
DNS 服务器学习笔记:核心总结与实验指南 📌 一、文章核心重点总结 1. DNS 基础知识 什么是 DNS? DNS(Domain Name System,域名系统)是互联网的“电话簿”,负责将人类易记的域名(如 w…...
视频质量评估技术解析与ClearView系统实践
1. 视频质量评估的行业现状与技术痛点 在数字电视和流媒体爆发式增长的今天,视频质量评估(Video Quality Assessment, VQA)已成为设备制造商和内容提供商的核心竞争力指标。我从事视频处理算法开发已有八年,亲眼见证了这个领域从依…...
