当前位置: 首页 > 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…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...