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; // 鼠标松开时,置为falseQRect 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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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界面设计

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《C语言深度解剖》(2):详解C语言分支语句和循环

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《C语言深度解剖》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多数据结构与算法点击专栏链接查看&am…

基于wsl的Ubuntu20.04上安装桌面环境

在子系统Ubuntu20.04上安装桌面环境 1. 更换软件源 由于Ubuntu默认的软件源在国外&#xff0c;有时候后可能会造成下载软件卡顿&#xff0c;这里我们更换为国内的阿里云源&#xff0c;其他国内源亦可。 双击打开Ubuntu20.04 LTS图标&#xff0c;在命令行中输入 # 备份原来的软…

ThinkPHP审计(2) Thinkphp反序列化链5.1.X原理分析从0编写POC

ThinkPHP审计(2) Thinkphp反序列化链子5.1.X原理分析&从0编写POC 文章目录 ThinkPHP审计(2) Thinkphp反序列化链子5.1.X原理分析&从0编写POC动态调试环境配置Thinkphp反序列化链5.1.X原理分析一.实现任意文件删除二.实现任意命令执行真正的难点 Thinkphp反序列化链5.1.…

软件测试_黑盒测试_等价类划分法

黑盒测试 等价类划分法 等价类划分法 一个程序可以有多个输入&#xff0c;等价类划分就是将这些输入数据按照输入需求进行分类&#xff0c;将它们划分为若干个子集&#xff0c;这些子集即为等价类&#xff0c;在每个等价类中选择有代表性的数据设计测试用例。 有效等价类&a…

什么是MQ ?为什么用MQ?

什么是MQ&#xff1f; MQ(message queue)&#xff08;消息队列&#xff09;&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO先入先出&#xff0c;只不过队列中存放的内容是message而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息…

2024/4/1—力扣—按摩师

代码实现&#xff1a; 思路&#xff1a;打家劫舍题 int massage(int *nums, int numsSize) {if (nums NULL || numsSize 0) {return 0;}if (numsSize 1) {return nums[0];}int dp[numsSize];memset(dp, 0, sizeof(dp));dp[0] nums[0];dp[1] (nums[0] < nums[1] ? nums…

Redis常见的一些问题和注意事项

本文汇总的都是在我们公司出现过的常见问题以及自己曾经记录的注意事项。 我们公司sentinel模式以及RedisCluster集群两种部署方式都有使用&#xff0c;下面问题有些可能是哨兵模式下存在的&#xff0c;比如批量操作&#xff0c;下面可能不会特别说明。 1、注意热点key 之前单位…

Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066

很奇怪的问题,在使用nifi的时候碰到的,这里是用NIFI,把数据从postgresql中同步到mysql中, 首先postgresql中的源表,中是没有create_time这个字段的,但是同步的过程中报错了. 报错的内容是说,目标表中有个create_time字段,这个字段是必填的,但是传过来的flowfile文件中,的数据没…

轻松驾驭工作流:低代码开发平台一键回退,流程错误无处遁形

流程回退规则配置 说明 通常业务场景&#xff0c;当我们流程节点开启回退功能后&#xff0c;可根据业务需求设置不同节点自定义回退到哪一节点。如某一节点审批人可以直接退到发起人节点&#xff0c;另外节点审批人又可以回退到另外节点或者是范围内等等&#xff0c;这些都是…

001集——在线网络学习快速完成——16倍速度

在线网络学习快进方法如下&#xff1a; 电脑下载 Microsoft edge 浏览器&#xff0c;有的电脑是自带的 1、点击右上角… 2、点击"扩展" 3、点击"管理扩展" 4、点击"获取 Microsoft edge 扩展" 5、搜索框里搜" global " 6、获取"…

基于SpringBoot+uniapp的兼职众包系统小程序众包软件源码

项目背景 在数字化浪潮的推动下&#xff0c;兼职众包行业正在迅速崛起&#xff0c;成为灵活就业市场的新宠。兼职众包系统软件与平台以其高效、便捷的特点&#xff0c;吸引了越来越多的用户和企业。在数字化时代&#xff0c;兼职众包平台作为连接灵活劳动力与需求方的桥梁&…

【电路笔记】-逻辑非门

逻辑非门 文章目录 逻辑非门1、概述2、晶体管逻辑非门3、六角施密特反相器逻辑非门是所有逻辑门中最基本的,通常称为反相缓冲器或简称为反相器。 1、概述 反相非门是单输入器件,其输出电平通常为逻辑电平“1”,当其单个输入为逻辑电平“1”时,输出电平变为“低”至逻辑电平…