QWidget|QFrame设置背景透明且可以带有边框颜色

QWidget|QFrame设置背景透明且可以带有边框颜色

  • Chapter1 《Qt》part 6 QSS Qt样式表——界面美化1($$$)
  • Chapter2 【QT】QSS美化——基础知识
  • Chapter3 QWidget|QFrame设置背景透明且可以带有边框颜色
  • 参考链接
  • Chapter4 Qt 中设置窗体(QWidget)透明度的几种方法
    • 1. 设置窗体的背景色
    • 2. 使用函数
  • Chapter5 Qt之QSS基础($$$)
  • Chapter6 QSS入门——简单登录界面制作
  • Chapter7 [QT编程系列-39]:用户界面UI - 样式表QSS与样式文件快速入门($$$)


Chapter1 《Qt》part 6 QSS Qt样式表——界面美化1($$$)

原文链接:https://blog.csdn.net/sinat_24206709/article/details/55805254

样式表给你无聊的Qt GUI增添了重味道。

很长一段时间,Qt已经允许你使用CSS’ish样式表来装饰你的GUI。 受网络启发,样式表是一个伟大的方式来风格化你的Qt GUI,但似乎很少有人使用它们。 在本教程中,我们将使用Designer和样式表在Qt中创建一个示例对话框。 本教程假设您可以在Qt Designer中解决,并且您了解一些关于Qt布局。

第一种方法:

ui->widget->setAutoFillBackground(true);
QPalette palette;
palette.setColor(QPalette::Background, QColor(0,0,0,150)); // 最后一项为透明度
//palette.setBrush(QPalette::Background, QBrush(QPixmap(":/background.png")));
ui->widget->setPalette(palette);

第二种方法(推荐):

this->setWindowFlags(Qt::FramelessWindowHint);//无标题栏   
this->setAttribute(Qt::WA_TranslucentBackground,true); //设置背景透明

记住在主widget上多加一个widget打底。

在这里插入图片描述
在这里插入图片描述

Chapter2 【QT】QSS美化——基础知识

原文链接

在这里插入图片描述

Chapter3 QWidget|QFrame设置背景透明且可以带有边框颜色

原文链接:https://blog.csdn.net/Stone_OverLooking/article/details/111590068

之前在项目中有个需求:视频播放窗口电子放大功能,需要在播放视频的QWidget上绘制一个可以拖拽的矩形框,但是单独的drawRect并不能获得焦点去拖拽。于是乎就另外想到一个办法使用一个透明的

QWidget覆盖到该窗口上,将其背景设置为透明即可,但是设置透明之后,其底色的黑色无法消除,经多方CSDN博主的成果于一身,搞定了该需求。

其实就是这么几点:

设置背景透明

setWindowOpacity(1);
this->setAttribute(Qt::WA_TranslucentBackground, true);

在该窗口绘制一个矩形框,为画刷填充一个任意的颜色,重点:将其透明度降为不为0的数值即可。实现透明效果。

void AlargeShape::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.setBrush(QColor(9,151,247,1));//painter区域全部的背景色painter.setPen(QPen(Qt::red,2,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin));painter.drawRect(2, 2, end_pos.x()-X-4,end_pos.y()-Y-4);
}

源码:

#include <QFrame>
class AlargeShape : public QFrame// QWidget
{Q_OBJECT
public:QWidget* widgetShape;explicit AlargeShape(QWidget *parent = nullptr);void paint(QPainter &painter);void setWidgetGeometry(QPoint point);
signals:
private://设置鼠标拖动窗体时的状态bool m_move ;/*记录鼠标的世界坐标.*/QPoint m_startPoint ;/*记录窗体的世界坐标.*/QPoint m_windowPoint ;
private://记录鼠标所在的位置QPoint start_pos;QPoint end_pos;int X,Y;//记录父窗体所在的位置QPoint parent_pos;int parent_width,parent_height;void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event)override;void mouseReleaseEvent(QMouseEvent *event)override;void paintEvent(QPaintEvent *)override;
public:void SetParentPos(QPoint pos,int w,int h){parent_pos=pos;parent_width=w;parent_height=h;}void SetStartPos(const QPoint pos){start_pos=pos;}void SetEndPos(const QPoint pos){end_pos=pos;}
};
#include "alargeshape.h"
#include <QMouseEvent>
#include <QPainter>
#include <QDebug>
#include <qpalette>
AlargeShape::AlargeShape(QWidget *parent) //: QWidget(parent)
{        this->setWindowFlags(Qt::Tool| Qt::FramelessWindowHint|Qt::WindowSystemMenuHint | Qt::WindowStaysOnTopHint);setObjectName("frameAlarge");setWindowOpacity(1);this->setAttribute(Qt::WA_TranslucentBackground, true);
}
/*************************************************************************  @描述:改变当前窗口大小,在父窗体的paintEvent中调用*  @参数:*  @返回:*  @作者:zhontao*  @时间:2020-12-23 14:57:57
************************************************************************/
void AlargeShape::paint(QPainter &painter)
{this->show();this->resize(QSize(end_pos.x()-X,end_pos.y()-Y));
}void AlargeShape::setWidgetGeometry(QPoint point)
{X=point.x();Y=point.y();this->setGeometry( point.x(), point.y(),0,0);
}void AlargeShape::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.setBrush(QColor(9,151,247,1));//painter区域全部的背景色painter.setPen(QPen(Qt::red,2,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin));painter.drawRect(2, 2, end_pos.x()-X-4,end_pos.y()-Y-4);
}void AlargeShape::mousePressEvent(QMouseEvent *event)
{/*当鼠标左键点击时.*/if (event->button() == Qt::LeftButton){m_move = true;/*记录鼠标的世界坐标.*/m_startPoint = event->globalPos();/*记录窗体的世界坐标.*/m_windowPoint = this->frameGeometry().topLeft();}
}void AlargeShape::mouseMoveEvent(QMouseEvent *event)
{if (event->buttons() & Qt::LeftButton){//计算父窗口的四个角点坐标QPoint p_left_top=parent_pos;QPoint p_left_bottom=QPoint(parent_pos.x(),parent_pos.y()+parent_height);QPoint p_right_top=QPoint(parent_pos.x()+parent_width,parent_pos.y());QPoint p_right_bottom=QPoint(parent_pos.x()+parent_width,parent_pos.y()+parent_height);//          局限矩形仅限于当前窗口内
//        /*移动中的鼠标位置相对于初始位置的相对位置.*/
//        QPoint relativePos = event->globalPos() - m_startPoint;if(  ((event->globalPos().x()-p_left_top.x())-(m_startPoint.x()-m_windowPoint.x()) >=0 )&&((event->globalPos().x()-p_right_top.x())-(m_startPoint.x()-(m_windowPoint.x()+this->width())) <=0 ) &&((event->globalPos().y()-p_left_top.y())-(m_startPoint.y()-m_windowPoint.y()) >=0)&&((event->globalPos().y()-p_left_bottom.y())-(m_startPoint.y()-(m_windowPoint.y()+this->height())) <=0)){/*移动中的鼠标位置相对于初始位置的相对位置.*/QPoint relativePos = event->globalPos() - m_startPoint;/*然后移动窗体即可.*/this->move(m_windowPoint + relativePos );}}
}
void AlargeShape::mouseReleaseEvent(QMouseEvent *event)
{if (event->button() == Qt::LeftButton){/*改变移动状态.*/m_move = false;}
}

效果图:
在这里插入图片描述

参考链接

Qt实现两个窗口重叠,下层播放视频,上次透明显示方框

QtWidget 设置背景透明方法汇总【转】

Qt关于实现自定义标题栏/窗口时遇到的背景透明化无效问题

Chapter4 Qt 中设置窗体(QWidget)透明度的几种方法

原文链接:https://blog.csdn.net/m0_60259116/article/details/127887533

1. 设置窗体的背景色

在构造函数里添加代码,需要添加头文件qpalette或qgui

QPalette pal = palette(); 
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00)); 
setPalette(pal);

通过设置窗体的背景色来实现,将背景色设置为全透。

效果: 窗口整体透明,但窗口控件不透明,QLabel控件只是字显示,控件背景色透明; 窗体客户区完全透明。

2. 使用函数

setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);//去掉标题栏
setAttribute(Qt::WA_TranslucentBackground, true);//设置窗口背景透明

同样在构造函数中,效果和第一种方法相同。

Chapter5 Qt之QSS基础($$$)

原文链接:https://blog.csdn.net/u011832219/article/details/128183316

Chapter6 QSS入门——简单登录界面制作

原文链接:https://blog.csdn.net/qq_39347787/article/details/130102515

Chapter7 [QT编程系列-39]:用户界面UI - 样式表QSS与样式文件快速入门($$$)

原文链接:https://blog.csdn.net/HiWangWenBing/article/details/131750858

Qt提供了一种称为Qt样式表(Qt Style Sheets)的机制,可以用于自定义和美化Qt应用程序的用户界面(UI)。

使用Qt样式表,你可以通过类似CSS的语法来定义UI元素的外观和布局,包括颜色、字体、边框、背景等。

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

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

相关文章

源码角度分析Java 循环中删除数据为什么会报异常

一、源码角度分析Java 循环中删除数据为什么会报异常 相信大家在之前或多或少都知道 Java 中在增强 for中删除数据会抛出&#xff1a;java.util.ConcurrentModificationException 异常&#xff0c;例如&#xff1a;如下所示程序&#xff1a; public class RmTest {public sta…

【微信小程序】发布投票与用户投票完整讲解

目录 前言 组件功能示例 一、数据库 二、后端接口定义 三、前端准备 3.1 定义连接接口 3.2 Vant Weapp UI 组件库 3.3 授权登录与相关工具 四、小程序编写 4.1 投票组件 WXML WXSS JSON WXJS 效果展示讲解&#xff1a; 4.2 发布投票组件 WXML WXSS JSON WX…

qt hiRedis封装使用

qt Redis使用_大别山的孩子的博客-CSDN博客文章浏览阅读2.6k次。代码是对redis常见的hash的封装和使用每个函数都亲自测试过关于如何安装hiredis模块&#xff0c;网上一搜一大堆&#xff0c;这里不在赘述&#xff0c;如有其他问题欢迎留言交流。头文件#ifndef REDISBASEMODULE_…

windows PC virtualBox 配置

效果&#xff1a; oracle vitualbox 可以访问通PC主机&#xff0c;可以访问外网: 注意&#xff0c;如果docker0网络地址&#xff0c;和PC主机的网络地址冲突了&#xff0c;需要变更docker的网络地址&#xff1a; root/home/mysqlPcap/anti-tamper $ cat /etc/docker/daemon.js…

【计算机网络】从输入URL到页面都显示经历了什么??

文字总结 ① DNS 解析&#xff1a;当用户输入一个网址并按下回车键的时候&#xff0c;浏览器获得一个域名&#xff0c;而在实际通信过程中&#xff0c;我们需要的是一个 IP 地址&#xff0c;因此我们需要先把域名转换成相应 IP 地址。浏览器会首先从缓存中找是否存在域名&…

【C语言】memmove()函数(拷贝重叠内存块函数详解)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.memmove()函数简介 1.函数功能 2.函数参数 1>.void * destination 2>.onst void * source 3>.size_t num 3.函数返回值 4.函数头文件 二.memmove()函数…

centos 8 yum源不能使用问题

问题&#xff1a;新安装的centos 8 不能使用wget就不能下载和安装其他的软件 错误&#xff1a;为仓库 appstream 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs in mirrorlist 解决&#xff1a; [rootlocalhost ~]# cd /etc/yum.repos.d [rootlocalhost yu…

简历自动生成工具

简历自动生成工具 简历自动生成工具&#xff0c;可根据提供的关键字生成完整内容&#xff0c;并应用于多个模板中。避免想更换简历风格的小伙伴&#xff0c;重复编辑简历的烦恼。 使用方法 每个求职者都需要认真对待自己的简历&#xff0c;特别是那些实力还不错的&#xff0c…

JavaScript在IE和标准浏览器下的兼容性处理

目录 ​编辑 前言 1. 事件对象的获取 2. 获取浏览器窗口的宽度和高度 3. 获取事件的目标元素 4. 阻止事件的默认行为 5. 阻止事件冒泡 6. 设置和获取元素的属性 7. 类名的操作 8. AJAX的兼容性处理 9. DOM元素的操作 10. 样式的获取和设置 总结 前言 在Web开发中…

第2篇 机器学习基础 —(2)分类和回归

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。机器学习中的分类和回归都是监督学习的问题。分类问题的目标是将输入数据分为不同的类别&#xff0c;而回归问题的目标是预测一个连续的数值。分类问题输出的是物体所属的类别&#xff0c;而回归问题输出的是数值。本节课就…

AR眼镜安卓主板,智能眼镜光机方案定制

AR智能眼镜是一项涉及广泛技术的创新产品&#xff0c;它需要考虑到光学、显示、功耗、散热、延迟、重量以及佩戴人体工学等多个方面的因素&#xff0c;每一个项目都是技术进步所需攻克的难题。 在本文中&#xff0c;我们将重点讨论AR眼镜的主板和光学方案。 首先是AR智能眼镜的…

非侵入式负荷检测与分解:电力数据挖掘新视角

电力数据挖掘 概述案例背景分析目标分析过程数据准备数据探索缺失值处理 属性构造设备数据周波数据模型训练 性能度量推荐阅读 主页传送门&#xff1a;&#x1f4c0; 传送 概述 摘要&#xff1a;本案例将根据已收集到的电力数据&#xff0c;深度挖掘各电力设备的电流、电压和功…

​Vue2【双向数据绑定/响应式原理】

目录 初始化 initProps()&#xff1a;父组件传的 props 列表&#xff0c;proxy() 把属性代理到当前实例上 vm._props.xx 变成 vm.xx initData()&#xff1a;判断data和props、methods是否重名&#xff0c;proxy() 把属性代理到当前实例上 this.xx observe()&#xff1a;给…

Linux设置命令开机自动执行

~/.bash_profile完整的命令占用一行&#xff0c;开机自动执行

前端工程化面试题及答案【集合】

前言&#xff1a; 欢迎浏览和关注本专栏《 前端就业宝典 》&#xff0c; 不管是扭螺丝还是造火箭&#xff0c; 多学点知识总没错。 这个专栏是扭螺丝之上要造火箭级别的知识&#xff0c;会给前端工作学习的小伙伴带来意想不到的帮助。 本专栏将前端知识拆整为零&#xff0c;主要…

大语言模型(LLM)综述(四):如何适应预训练后的大语言模型

A Survey of Large Language Models 前言5. ADAPTATION OF LLMS5.1 指导调优5.1.1 格式化实例构建5.1.2 指导调优策略5.1.3 指导调优的效果5.1.4 指导调优的实证分析 5.2 对齐调优5.2.1 Alignment的背景和标准5.2.2 收集人类反馈5.2.3 根据人类反馈进行强化学习5.2.4 无需 RLHF…

分享8个分布式Kafka的使用场景

Kafka 最初是为海量日志处理而构建的。它保留消息直到过期&#xff0c;并让消费者按照自己的节奏提取消息。与它的前辈不同&#xff0c;Kafka 不仅仅是一个消息队列&#xff0c;它还是一个适用于各种情况的开源事件流平台。 1. 日志处理与分析 下图显示了典型的 ELK&#xff0…

Java练习题2020 -1

统计1到N的整数中&#xff0c;被A除余A-1的偶数的个数 输入说明&#xff1a;整数 N(N<10000), A, (A 输出说明&#xff1a;符合条件的数的个数 输入样例&#xff1a;10 3 输出样例&#xff1a;2 (说明&#xff1a;样例中符合条件的2个数是 2、8) import java.util.Scanner;p…

【开源】基于SpringBoot的农村物流配送系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理&#xff1a;2.2.2 位置信息管理&#xff1a;2.2.3 配送人员分配&#xff1a;2.2.4 路线规划&#xff1a;2.2.5 个人中心&#xff1a;2.2.6 退换快递处理&#xff1a;…

基于nodejs+vue全国公考岗位及报考人数分析

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…