QT软件开发: 点击鼠标在窗口里绘制矩形(窗口透明背景)

QT软件开发: 点击鼠标在窗口里绘制矩形(窗口透明背景)-腾讯云开发者社区-腾讯云

一、功能需求

一般在软件开发中,需要都有选择区域的需求,比如:

1. 截图软件,需要鼠标选择指定区域截图

2. 屏幕录像软件,需要鼠标选择指定区域录像

3. 图片浏览器,需要鼠标选择指定区域放大查看

4. 视频播放器,需要鼠标选择指定区域放大播放

...........

工程下载地址: https://download.csdn.net/download/xiaolong1126626497/21043499

二、运行效果

三、示例代码

3.1 widget.cpp

#include "widget.h"
#include "ui_widget.h"

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

    //隐藏标题栏
    setWindowFlags(Qt::FramelessWindowHint);//无边框 置顶

    //设置窗口背景透明
    setAttribute(Qt::WA_TranslucentBackground);

    //全屏显示
    showFullScreen();

    //设置样式
    this->setStyleSheet("#Widget{background-color: rgba(0, 0, 0, 150);}");
}

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

void Widget::paintEvent(QPaintEvent *p1)
{
    //绘制样式
    QStyleOption opt;
    opt.initFrom(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);//绘制样式

    if(isPressedWidget)
    {
       //定义画笔
        QPen pen;
        pen.setWidth(5);
        pen.setColor(QColor("#00B0AE"));
        pen.setStyle(Qt::DashDotLine);
        p.setPen(pen);

        //创建画刷
        QBrush brush;
        brush.setColor(QColor("#00B0AE"));
        brush.setStyle(Qt::Dense6Pattern);
        p.setBrush(brush);

        QRect tempRt(m_startPT, m_endPT);
        p.drawRect(tempRt);
    }
}

void Widget::mousePressEvent(QMouseEvent *event)
{
    m_endPT = m_startPT = event->pos();
    isPressedWidget = true; // 当前鼠标按下的即是QWidget而非界面上布局的其它控件
}


void Widget::mouseMoveEvent(QMouseEvent *event)
{
    QPoint tmp_pos=event->pos();
    if(tmp_pos.x()>m_startPT.x() || tmp_pos.y()>m_startPT.y())
    {
        m_endPT = event->pos();
    }
    this->update();
}


void Widget::mouseReleaseEvent(QMouseEvent *event)
{
    isPressedWidget = false; // 鼠标松开时,置为false
    QRect rect(m_startPT, m_endPT);
    qDebug()<<"选择的范围:"<<rect;
}

/*
工程: HTTP_Request
日期: 2021-08-12
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: 进入全屏
*/
void Widget::on_pushButton_clicked()
{
     showFullScreen();
}

/*
工程: HTTP_Request
日期: 2021-08-12
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: 退出全屏
*/
void Widget::on_pushButton_2_clicked()
{
    showNormal();
}

/*
工程: HTTP_Request
日期: 2021-08-12
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: close
*/
void Widget::on_pushButton_close_clicked()
{
    close();
}

3.2 widget.h代码

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QStyleOption>
#include <QPainter>
#include <QMouseEvent>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
protected:
    //截取鼠标事件绘制窗口位置. 因为标题栏隐藏后.窗口是无法拖动的。
    void mouseReleaseEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mousePressEvent(QMouseEvent *event);
    void paintEvent(QPaintEvent *p);
private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_close_clicked();

private:
    Ui::Widget *ui;
    bool isPressedWidget;

    QPoint	m_startPT;
    QPoint	m_endPT;
};
#endif // WIDGET_H

3.3 UI界面设计

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

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

相关文章

在git上先新建仓库-把本地文件提交远程

一.在git新建远程项目库 1.选择新建仓库 以下以gitee为例 2.输入仓库名称&#xff0c;点击创建 这个可以选择仓库私有化还公开权限 3.获取仓库clone链接 这里选择https模式就行&#xff0c;就不需要配置对电脑进行sshkey配置了。只是需要每次提交输入账号密码 二、远…

QT 线程之movetothread

上文列举了qt中线程的几种方法&#xff0c;其中2种方法最为常见。 本文以实例的方式描述了movetothread&#xff08;&#xff09;这种线程的方法&#xff0c;将QObject的子类移动到指定的线程。 一、例子 1. Worker类 1.1Worker类头文件 #ifndef WORKER_H #define WORKER_H…

量化《水手》

量化技术的两个指标是压缩比和保真度。这里使用郑智化《水手》中的一段音乐&#xff0c;对Lloyd标量量化方法和LBG矢量量化方法做对比。 原始的音乐是WAV格式&#xff0c;时长9秒钟&#xff0c;单声道&#xff0c;采样率为44.1KHz&#xff0c;每个采样点的比特数为16。 首先对…

HTTPS证书是什么?怎么获取?

HTTPS证书&#xff0c;全称是安全套接层&#xff08;SSL&#xff09;或传输层安全&#xff08;TLS&#xff09;证书&#xff0c;是一种数字证书&#xff0c;用于在互联网上建立安全的加密连接&#xff0c;确保数据在客户端&#xff08;如Web浏览器&#xff09;与服务器端&#…

评论列表信息删除功能的实现

需求&#xff1a;删除当前评论&#xff0c;并且在列表中不再显示 核心思路&#xff1a;拿到即将被删除的列表信息id,对列表进行filter过滤 1.定义渲染列表信息 2.添加渲染删除条件&#xff08;如果当前登录用户信息的uid和渲染列表信息里的uid保持一致&#xff0c;那么就将删…

VMwear桥接网络正确配置+静态IP设置

1.桥接网络配置 很多时候在VMware安装完虚拟机之后&#xff0c;会发现配置的桥接网络没有起作用&#xff0c;如果是Linux下输入ifconfig发现只有ipv6的地址而没有ipv4&#xff0c;说明没有桥接没有启用成功&#xff0c;需要按照以下方式来设置 在VMware的左上角打开编辑&#…

ENSP USG防火墙接入虚拟机;开启Web访问;

1.添加防火墙及云&#xff0c;启动防火墙&#xff1b; 2.配置桥接网卡&#xff1b; 默认账户&#xff1a;admin 默认密码&#xff1a;Admin123 #第一次登陆需修改密码&#xff1b; 默认G0/0/0口为管理口&#xff0c;而在模拟器中进入防火墙的web需如下配置&#xff1a; 配置 …

面试(02)————Java基础和集合

一、Java基础知识 1、面向对象的特征 2、Java 的基本数据类型有哪些 3、JDK JRE JVM 的区别 4、重载和重写的区别 5、Java中和equals的区别 6 、String、StringBuffer、StringBuilder三者之间的区别 7、接口和抽象类的区别是什么&#xff1f; 8、反射 9、jdk1.8 的新特…

力扣刷题--不同的二叉搜索树96

不同的二叉搜索树 该题虽然是一个二叉树的题目 但是使用动态规划做 dp[i]数组的含义&#xff1a;i个节点有多少种组合方式递推公式&#xff1a;dp[i] dp[j] dp[i-1-j] j(0–>i-1)初始化&#xff1a;dp[0]1 dp[1] 1确定递推顺序 i(2–>n) j(0–>i-1)推导一遍 c…

后端说处理了跨域但没有生效

场景&#xff1a; 常见的跨域报错&#xff0c;一般都是由后端进行setHeader/*什么的。但是现在这种情况就是后端说他们做了处理。但是我这边请求还是报错。 withCredentials: with-credentials用来设置是否发送cookie&#xff0c;如果为true就会在跨域请求时候携带cookie&…

DC/DC1A30V高效同步降压转换器H4010

DC/DC 1A30V高效同步降压转换器是一种高频、同步、整流、降压、开关模式转换器&#xff0c;内置功率MOSFET。它可以在宽输入电源范围内实现1.5A峰值输出电流&#xff0c;并具有出色的负载和线路调节性能。此外&#xff0c;该转换器需要最少数量的现成外部元件&#xff0c;并采用…

电脑桌面上表格不见了怎么找回?这5个方法不要错过

在日常的办公和学习中&#xff0c;电脑桌面上的各种文件、文件夹和表格等无疑是我们较为频繁使用的资源。然而&#xff0c;有时我们可能会因为一些操作失误或者电脑问题&#xff0c;突然发现桌面上的某个表格文件神秘失踪了。面对这种情况&#xff0c;很多人可能会感到焦虑和不…

Win11怎么关闭防火墙,win11怎么关闭防火墙对应用的限制

Win11系统如何关闭防火墙呢?有时候我们安装一些软件的时候,屏幕右下角会弹出警告,提示软件被拦截,无法安装成功。如果想要正常安装的话,需要先将防火墙功能给关闭了。由于win11的操作逻辑与win10大不同,所以许多小伙伴不清楚win11如何管理防火墙。接下来,小编跟大家分享…

C语言 | Leetcode C语言题解之第12题整数转罗马数字

题目&#xff1a; 题解&#xff1a; const char* thousands[] {"", "M", "MM", "MMM"}; const char* hundreds[] {"", "C", "CC", "CCC", "CD", "D", "DC"…

beego 官网文档本地环境搭建

beego 官网文档本地环境搭建&#xff0c;为什么要本地环境搭建呢&#xff1f;因为beego 原来的官网文档&#xff08;https://beego.gocn.vip/&#xff09;已经不能用了&#xff0c;beego 官网已经在github上说明了&#xff0c;因此如果想方便的看官网文档&#xff0c;就需要在本…

《乡土中国》中国基层传统社会里的一种体系,支配着社会生活的各方面 - 三余书屋 3ysw.net

乡土中国 大家好&#xff0c;今天我们要解读的是费孝通先生的经典著作《乡土中国》。这本书的中文版大约有10万字&#xff0c;我将用30分钟左右的时间为你解读书中的精髓。为什么说中国的根基在于乡土社会&#xff1f;我们应该从哪些方面来理解乡土社会的特征及其重要性&#…

PMP考试难度大吗?和软考比怎么样?

软考和PMP哪个更好考&#xff1f;巧了&#xff0c;两个证都有&#xff0c;我感觉是PMP更好考也更有含金量&#xff0c;软考可以在考过PMP后去考试&#xff0c;基本不用学。PMP是偏向项目管理方向的考试&#xff0c;而软考除了项目管理还要有足够的计算机知识&#xff0c;对没基…

文心一言 VS 讯飞星火 VS chatgpt (231)-- 算法导论17.1 2题

二、证明&#xff1a;如果 k 位计数器的例子中允许 DECREMENT 操作&#xff0c;那么 n 个操作的运行时间可能达到 Θ(nk)。 文心一言&#xff1a; 为了证明如果 k 位计数器的例子中允许 DECREMENT 操作&#xff0c;那么 n 个操作的运行时间可能达到 Θ(nk)&#xff0c;我们可…

力扣回溯篇

文章目录 46.全排列78.子集17.电话号码的字母组合39.组数总和79.单词搜索131.分割回文子串 46.全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其所有可能的全排列 。你可以按任意顺序返回答案。 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],…

C++利用键值对计算某一个数对应的最值及其索引位置

目录 一、算法概述二、代码实现1、计算最值2、计算最值及其索引 三、结果展示 本文由CSDN点云侠原创&#xff0c;原文链接。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫与GPT。 一、算法概述 类似下图所示&#xff0c;计算第一列中1或2对应的最…