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

Qt 详解QRubberBand

文章目录

      • QRubberBand 简介
        • 前言
      • QRubberBand 的作用
      • QRubberBand 的主要功能
      • QRubberBand 的常用方法
      • QRubberBand 的典型应用场景
      • 示例代码
      • 总结


QRubberBand 简介

前言

在 Qt 中,QRubberBand 是一个非常实用的控件,它通常用于图形界面中的“选择区域”功能。QRubberBand 是一个可视化的矩形框(通常是虚线框或实线框),用户可以通过拖动鼠标来创建一个区域,从而选择或标记屏幕上的某个区域。这个控件在许多应用中都非常有用,尤其是在需要选择或框选内容的场景中,例如图像编辑、文件管理器、数据可视化等。

本文将详细介绍 QRubberBand 的作用、主要功能以及典型的应用场景,帮助开发者更好地理解它的用途和实现方式。


QRubberBand 的作用

QRubberBand 主要用于在界面中显示一个可调整大小的矩形区域。用户可以通过拖动鼠标在窗口中选择一块区域,通常用虚线、实线或其他样式来突出显示。它为用户提供了一种直观的交互方式,广泛应用于需要框选区域或标记区域的场景。

QRubberBand 主要有两个功能:

  1. 显示选择框:为用户在界面中提供一个矩形框,用户通过拖动来选择区域。
  2. 动态调整大小:可以随时调整矩形的大小和位置,用于实时显示用户选择的区域。

就是桌面上的这个东西
在这里插入图片描述

常见的场景包括:

  • 图像查看器中选定图像区域。
  • 文件浏览器中选择多个文件的区域。
  • 地图应用中选择一个地图区域。

QRubberBand 的主要功能

QRubberBand 类继承自 QWidget,可以通过设置不同的模式和样式来控制显示效果。它提供了多种方法来定制和操作矩形框。以下是 QRubberBand 的一些主要功能:

  1. 设置矩形形状和样式

    • QRubberBand 通过 setGeometry() 方法来设置矩形的大小和位置,同时可以设置矩形框的边框样式(如虚线或实线)。
    • setStyle() 方法允许开发者选择不同的样式,通常用于选择不同的边框类型。
  2. 显示和隐藏选择框

    • QRubberBand 提供了 show()hide() 方法,开发者可以在需要时显示或隐藏选择框。
  3. 实时更新区域

    • 可以通过捕捉鼠标事件来动态调整选择框的大小和位置,实时更新用户的选择区域。
  4. 支持不同的选择区域模式

    • QRubberBand 可以创建矩形框(常见的选择区域模式),也可以自定义其他形状,如圆形或自由形状框。
  5. 与鼠标事件配合

    • 通常与鼠标拖动事件结合使用,用户按下鼠标并拖动时,QRubberBand 显示为一个矩形框,随着鼠标移动,矩形的大小和位置实时更新。
  6. 透明背景支持

    • 可以通过设置透明背景或半透明背景,让 QRubberBand 仅显示矩形边框,而背景部分可以显示背景控件的内容。

QRubberBand 的常用方法

以下是一些常见的 QRubberBand 方法,可以帮助开发者控制选择框的行为:

  1. QRubberBand::QRubberBand(QRubberBand::Shape, QWidget *parent)

    • 构造函数,用于创建一个 QRubberBand 对象。
    • Shape 参数可以设置选择框的形状(如矩形)。
    • parent 参数是该控件的父窗口或父控件。
  2. void setGeometry(const QRect &rect)

    • 设置矩形框的位置和大小。
    • rect 参数指定矩形的区域。
  3. void show()void hide()

    • 显示或隐藏选择框。
  4. void setStyle(QStyle::StyleHint style)

    • 设置选择框的边框样式。常见的样式有实线、虚线等。
  5. QRubberBand::Shape shape()

    • 获取选择框的形状类型。
  6. void setWindowOpacity(qreal level)

    • 设置选择框的透明度,通常用于控制选择框的背景透明度。

QRubberBand 的典型应用场景

QRubberBand 在许多需要用户交互选择区域的应用中都非常有用。以下是一些典型的应用场景:

  1. 图像编辑器

    • 在图像查看器或编辑器中,用户可以通过 QRubberBand 来选择图像的一部分,进行剪切、复制或其他编辑操作。
  2. 文件管理器

    • 在文件浏览器中,用户可以通过矩形框选择多个文件或文件夹。
  3. 地图应用

    • 在地图应用中,QRubberBand 可以用于选择地图的某个区域,例如选择一个地理范围进行缩放或标记。
  4. 图形设计软件

    • 在矢量图形设计软件中,用户常常需要选择多个图形元素,QRubberBand 可以帮助用户进行区域选择。
  5. 数据可视化

    • 在数据可视化应用中,用户可以通过 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 中&#xff0c;QRubberBand 是一个非常实用的控件&#xff0c;它通常用于图形界面中的“选择区域”功能…...

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服务器的权限&#xff0c;主要涉及到用户权限管理和文件系统权限设置。以下是详细的步骤和配置方法&#xff1a; 安装FTP服务器软件 首先&#xff0c;确保已经安装了FTP服务器软件。常用的FTP服务器软件包括vsftpd和Pure-FTPd。以下是使用vsftpd作为示例的安…...

@Pattern (用于校验字符串是否符合特定正则表达式)

Pattern 是一个用于校验字符串是否符合特定正则表达式的注解&#xff0c;它在 Java 中常用于验证输入数据的格式。以下是 Pattern 注解的详解和使用方法&#xff1a; 含义 Pattern 注解用于在 Java 中对字段进行注解&#xff0c;以确保其值与指定的正则表达式匹配。这个注解可…...

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&#xff08;OpenGL Shading Language&#xff09; 定义&#xff1a; GLSL 是 OpenGL 的着色器语言&#xff0c;用于编写 GPU 可编程着色器&#xff0c;定义图形渲染过程中顶点和像素&#xff08;片元&#xff09;的处理逻辑。…...

git基本操作说明

一 基本操作说明 Git常用命令&#xff1a; clone、push、add、commit、checkout、pull。 流程如下&#xff1a; 仓库说明&#xff1a; workspace&#xff1a;工作区staging area&#xff1a;暂存区/缓存区local repository&#xff1a;版本库或本地仓库remote repository&…...

微知-git如何添加空目录的几种方式?(.gitkeep, githook, gitconfig)

背景 在Git中&#xff0c;空目录&#xff08;空文件夹&#xff09;默认是不会被跟踪的&#xff0c;因为Git主要跟踪文件的变化。但是如何让git添加空目录&#xff1f; #mermaid-svg-3Y4NksLyEeuMs4FC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-si…...

MySQL 数据库学习教程一:开启数据库探索之旅

在当今数字化时代&#xff0c;数据已然成为企业和组织最为宝贵的资产之一。而数据库管理系统则是存储、管理和操作这些数据的核心工具。MySQL 作为一款广泛应用的开源关系型数据库管理系统&#xff0c;以其可靠性、高性能和易用性而备受青睐。如果你渴望踏入数据库领域&#xf…...

Vue+Elementui el-tree树只能选择子节点并且支持检索

效果&#xff1a; 只能选择子节点 添加配置添加检索代码 源码&#xff1a; <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、数组生成原理 所谓数组&#xff0c;是有序的元素序列。组成数组的各个变量称为数组的元素。对于Ex…...

Git的基本使用操作

文章目录 Git 全局配置基本操作Git 常用命令版本回退根据版本号回滚分支远端分支 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Git专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月1日12点50分 Git 全局配置 虽然说是全局配置&am…...

【C语言】结构体嵌套

结构体嵌套是指在一个结构体中定义另一个结构体作为其成员。这种方式可以实现更复杂的数据结构设计&#xff0c;便于对数据进行分层管理和组织&#xff0c;广泛应用于实际开发中&#xff0c;例如操作系统内核、嵌入式系统、网络协议解析等。下面是对结构体嵌套的详细介绍&#…...

PDF view | Chrome PDF Viewer |Chromium PDF Viewer等指纹修改

1、打开https://www.browserscan.net/zh/ 2、将internal-pdf-viewer改为 internal-pdf-viewer-jdtest看下效果&#xff1a; 3、源码修改&#xff1a; third_party\blink\renderer\modules\plugins\dom_plugin_array.cc namespace { DOMPlugin* MakeFakePlugin(String plugin_…...

maxun爬虫工具docker搭建

思路来源开源无代码网络数据提取平台Maxun 先把代码克隆到本地&#xff08;只有第一次需要&#xff09; 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. 内嵌式&#xff1a;在head中&#xff0c;通过一对script标签引入JS代码&#xff1b;cript代码放置位置有一定的随意性&#xff0c;一般放在head标签中&#xff1b;2.引入外部js文件 在head中&#xff0c;通过一对script标签引入外部JS代码&#xff1b;注意&…...

vue3中是如何实现双向数据绑定的

在 Vue 3 中&#xff0c;双向数据绑定主要通过 v-model 指令实现。v-model 是一个语法糖&#xff0c;它内部实际上结合了 v-bind 和 v-on 指令来实现数据的双向绑定。下面详细介绍 Vue 3 中双向数据绑定的实现原理和使用方法。 双向数据绑定的基本原理 v-bind 指令&#xff1…...

JavaScript事件机制详解

JavaScript中的事件模型是指当用户与网页进行交互时&#xff0c;浏览器会触发不同类型的事件&#xff0c;开发者可以通过添加事件监听器来响应这些事件。事件流是描述事件在页面元素中传播的过程&#xff0c;从窗口对象开始&#xff0c;逐级向下传播到最具体的元素&#xff0c;…...

k8s运行运行pod报错超出文件描述符表限制

1.问题描述 运行pod超过文件描述符表 unable to allocate file descriptor table - out of memory/opt/COMMAND.sh: line 9: 2.查看设备的文件描述符限制 操作前一定要先查询这个值&#xff0c;2097152这个值即为我们可设置的最大值&#xff0c;超过这个值后将无法登录&am…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...