Qt QRubberBand 如何实现鼠标框选控件

QRubberBand类提供了一个矩形或直线,可以指示选择或边界。常见的模式是结合鼠标事件来执行此操作。本文将使用框选QCheckBox控件,来演示QRubberBand是如何配合鼠标进行工作的。

一、RubberBand 框选效果图

RubberBand

二、RubberBand 代码

  • rubberband.h
#ifndef RUBBERBAND_H
#define RUBBERBAND_H
#include <QRubberBand>

class QPaintEvent;
class RubberBand : public QRubberBand
{
    Q_OBJECT
public:
    explicit RubberBand(Shape s, QWidget * p = 0);
protected:
    void paintEvent(QPaintEvent *event);
};

#endif // RUBBERBAND_H
  • rubberband.cpp
#include "rubberband.h"
#include <QPainter>
#include <QPaintEvent>

RubberBand::RubberBand(QRubberBand::Shape s, QWidget *p) :
    QRubberBand(s, p)
{
}

void RubberBand::paintEvent(QPaintEvent *event)
{
    QRubberBand::paintEvent(event);
    //
    QPainter p(this);
    QFont ft = font();
    ft.setFamily("microsoft yahei");
    ft.setPixelSize(14);
    p.setFont(ft);
    p.setPen(QPen(Qt::white, 2));

    int w = size().width();
    int h = size().height();
    if(w >10 && h >10)
    {
        QString text = QString("%1,%2").arg(w).arg(h);
        p.drawText(rect(), Qt::AlignTop|Qt::AlignHCenter, text);
    }
}

三、测试代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMouseEvent>
#include "rubberband.h"

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    m_lastpos = event->globalPos();
    QRect rc(m_startpos, m_lastpos);
    m_rubberBand->setGeometry(rc.normalized());
    m_rubberBand->show();
}

void MainWindow::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        if (nullptr == m_rubberBand)
            m_rubberBand = new RubberBand(QRubberBand::Rectangle);

        m_startpos = event->globalPos();
        m_rubberBand->setGeometry(QRect(m_startpos, QSize()));
        //m_rubberBand->show();
    }
}

void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
    QRect rect = m_rubberBand->geometry();
    QList<QCheckBox*> checks = findChildren<QCheckBox*>();
    for (auto v : checks)
    {
        QPoint point = v->mapToGlobal(QPoint(0, 0));
        if(rect.contains(point) /*&& v->inherits("QCheckBox")*/){
            v->setChecked(true);
        }
    }
    //
    if(m_rubberBand){
        delete m_rubberBand;
        m_rubberBand = nullptr;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/327742.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ug572】UltraScale体系结构时钟资源手册节选

概述 时钟架构概述 The UltraScale architecture clocking resources manage complex and simple clocking requirements with dedicated global clocks distributed on clock routing and clock distribution resources. The clock management tiles (CMTs) provide clock f…

经典目标检测YOLO系列(二)YOLOv2算法详解

经典目标检测YOLO系列(二)YOLOv2算法详解 YOLO-V1以完全端到端的模式实现达到实时水平的目标检测。但是&#xff0c;YOLO-V1为追求速度而牺牲了部分检测精度&#xff0c;在检测速度广受赞誉的同时&#xff0c;其检测精度也饱受诟病。正是由于这个原因&#xff0c;YOLO团队在20…

【RT-DETR有效改进】移动设备网络ShuffleNetV1(超轻量化网络主干)

前言 大家好&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持ResNet32、ResNet101和PP…

5路开关量输入转继电器输出 Modbus TCP远程I/O模块 YL95 传感器信号的测量

特点&#xff1a; ● 五路开关量输入&#xff0c;五路继电器输出 ● 支持Modbus TCP 通讯协议 ● 内置网页功能&#xff0c;可以通过网页查询电平状态 ● 可以通过网页设定继电器输出状态 ● DI信号输入&#xff0c;DO输出及电源之间互相隔离 ● 宽电源供电范围&#x…

django rest_framework 部署doc文档

1.背景 在实际开发过程中&#xff0c;前后端分离的项目&#xff0c;是需要将一份完整的接口文档交付给前端开发人员&#xff0c;这样有利于开发速度和开发质量&#xff0c;以及有可能减少协同时间。 2.内容 本项目是以Pythondjangorest_framework作为技术框架&#xff0c;在这…

VMware workstation安装Endeavouros-Galileo-11虚拟机并配置网络

VMware workstation安装Endeavouros-Galileo-11虚拟机并配置网络 EndeavourOS是基于Arch Linux的滚动式Linux发行。基于Arch来提供方便的安装及预配置好的桌面环境。EndeavourOS通过Calamares图形系统安装器来安装&#xff0c;缺省使用Xfce桌面。该文档适用于在VMware worksta…

61. 旋转链表

题目 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3]示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k 4 输出&#xff1a;…

基于大数据平台(XSailboat)的计算管道实现MySQL数据源的CDC同步--flink CDC

1. 背景 笔者在先前的一篇文档《数据标签设计 – 大数据平台(XSailboat)的数据标签模块》 提到了关于数据标签的模块&#xff0c;现已实现并应用于项目中。在项目中遇到这样一种情形&#xff1a; 在业务系统中&#xff0c;对某类对象打了标签&#xff0c;现在需要对这类对象进…

IOS-高德地图路径绘制-Swift

本文展示的是在IOS开发中调用高德地图进行驾车路径绘制&#xff0c;开发语言是Swift。 IOS高德地图集成请看&#xff1a;IOS集成高德地图Api 使用路径规划功能需要集成高德地图的搜索功能。 pod AMapSearch定义AMapSearchAPI 定义主搜索对象 AMapSearchAPI &#xff0c;并继承…

Android 13.0 Launcher3 电话和短信app图标显示未读短信和未接来电的条数

1.概述 在13.0系统产品rom定制化开发中,最近客户有需求要求在电话app图标显示未接来电的条数 在短信app图标上显示未读信息的条数 根据需求首选要在Launcher3的Launcher.java中,启动launcher时,查询未读短信和未接来电 在有未接来电时,更新未接来电的数量 在有未读短信时,…

浏览器网页内嵌Qt-C++音视频播放器的实现,支持软硬解码,支持音频,支持录像截图,支持多路播放等,提供源码工程下载

一.前言 在浏览器中实现播放RTSP实时视频流&#xff0c;⼤体上有如下⼏个⽅案&#xff1a; ⽅案一&#xff1a;浏览器插件⽅案 ActiveX、NPAPI、PPAPI ActiveX插件适用于IE浏览器&#xff0c;NPAPI与PPAPI插件适用于谷歌浏览器&#xff0c;不过这些插件都已经不被浏览器所支持…

【Discuz插件】价值299的论坛积分商城

第一步&#xff1a;首先利用上传工具FTP&#xff0c;将插件上传至网站空间&#xff08;相信你会搭建论坛&#xff0c;这步应该不是问题&#xff0c;此处滤过&#xff09; 第二步&#xff1a;找到source文件夹。双击source&#xff0c;可以看到有许多文件&#xff0c;找到plugi…

找不到msvcr100.dll怎么办?msvcr100.dll丢失的解决方法

在面对计算机系统中“msvcr100.dll”文件缺失这一常见问题时&#xff0c;用户可能会遇到应用程序无法正常启动或运行的情况。为了解决这一困扰广大用户的难题&#xff0c;本文将详细介绍并解析找不到“msvcr100.dll”文件的5种有效解决方法。 一、了解一下msvcr100.dll是什么&a…

mathtype2024版本下载与安装(mac版本也包含在内)

安装包补丁主要是mathtype的安装包&#xff0c;与它的补丁。 详细安装过程&#xff1a; step1&#xff1a; 使用方法是下载完成后先安装MathType-win-zh.exe文件&#xff0c;跟着步骤走直接安装就行。 step2&#xff1a; 关闭之后&#xff0c;以管理员身份运行MathType7PJ.exe…

【51单片机系列】继电器使用

文章来源&#xff1a;《零起点学Proteus单片机仿真技术》。 本文是关于继电器使用相关内容。 继电器广泛应用在工业控制中&#xff0c;通过继电器对其他大电流的电器进行控制。 继电器控制原理图如下。继电器部分包括控制线圈和3个引脚&#xff0c;A引脚接电源&#xff0c;B引…

【应用方案】基于MT7628 JN5169 和SUN724的4G-Zigbee智能网关方案

产品方案特性 - 4G-Zigbee智能网关扩展性强&#xff1b; - 百兆以太网接入&#xff1b; - 支持Zigbee 3.0智能家居产品和智能安防产品接入&#xff1b; - 实时检测烟感、气感&#xff0c;联动阀门控制器可自动关闭燃气阀门&#xff0c;并拨打报警电话&#xff0c;防止火灾&…

HBase 基础

HBase 基础 HBase1. HBase简介1.1 HBase定义1.2 HBase数据模型1.2.1 HBase逻辑结构1.2.2 HBase物理存储结构1.2.3 数据模型 1.3 HBase基本架构 2. HBase环境安装2.1 HBase 安装部署2.1.1 HBase 本地按照2.1.2 HBase 伪分布模式安装2.1.3 HBase 集群安装 2.2 HBase Shell操作2.2…

Python线程池multiprocessing.Pool

环境&#xff1a; 鲲鹏920:192核心 内存&#xff1a;756G python&#xff1a;3.9 python单进程的耗时 在做单纯的cpu计算的场景&#xff0c;使用单进程核多进程的耗时做如下测试&#xff1a; 单进程情况下cpu的占用了如下&#xff0c;占用一半的核心数&#xff1a; 每一步…

已实现:JS如何根据视频的http(s)地址,来截取帧图片,并实现大图压缩的功能

现在&#xff0c;我们已经有了视频的http地址&#xff0c;我们怎么截取帧图片呢&#xff1f;我以Vue为基础架构&#xff0c;来写写代码。 1、先写布局&#xff0c;先得有video&#xff0c;然后得有canvas <video id"videoPlay" style"width: 100%; height:1…

Qt超简单实现贪吃蛇

文章目录 常量Snake类GameController类GUI显示游戏简图 为了能够最简单地完成程序&#xff0c;所以没有用类的继承等知识。感兴趣的朋友可以改写一下。 常量 const int FILE_SIZE 30; //地图方格大小 const int FPS 5000 / 33; //游戏运行帧率 enum Item{empty, wall, food…