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

news2024/11/16 17:38:04

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

  • 《Qt》part 6 QSS Qt样式表——界面美化1
  • 【QT】QSS美化——基础知识
  • Chapter1 QWidget|QFrame设置背景透明且可以带有边框颜色
  • 参考链接
  • Chapter2 Qt 中设置窗体(QWidget)透明度的几种方法
    • 1. 设置窗体的背景色
    • 2. 使用函数
  • Chapter3 Qt之QSS基础
  • Chapter4 QSS入门——简单登录界面制作


《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打底。

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

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

原文链接

在这里插入图片描述

Chapter1 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关于实现自定义标题栏/窗口时遇到的背景透明化无效问题

Chapter2 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);//设置窗口背景透明

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

Chapter3 Qt之QSS基础

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用端口转发来访问集群中的应用

使用端口转发来访问集群中的应用 个人k8s集群信息&#xff1a; rootk8s-master:~# kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIM…

【源码】智慧导诊系统:告别排队等候,快速预约科室挂号!

去医院看病该挂什么科&#xff1f; 不知道该挂什么科我该问谁&#xff1f; 看到茫茫的排队就诊人群&#xff0c;心里绝望怎么办&#xff1f; 医院内部结构复杂&#xff0c;我要去的科室在哪里&#xff1f; 所有人都去咨询前台&#xff0c;前台压力大&#xff0c;患者也只 …

【ARM Trace32(劳特巴赫) 使用介绍 2 -- Trace32 cmm 脚本基本语法及常用命令】

文章目录 Trace32 CMM 概述1.1 Trace32 系统命令 SYStem1.1.1 Trace32 SYStem.CONFIG1.1.2 SYStem.MemAccess1.1.3 SYStem.Mode1.1.3.1 TRST-Resets the JTAG TAP controller and the CPU internal debug logic1.1.3.2 SRST- Resets the CPU core and peripherals 1.2 Trace32 …

原生mysql与mybatis执行update语句的差异

在做一个解除绑定的接口中&#xff0c;发现了这个一个问题&#xff1a; 连续对接口进行测试&#xff0c;发现一直fan返回解除成功&#xff0c;但是逻辑上应该是解除之后&#xff0c;在解除它后就应该回显已解除绑定才对 就一直找原因&#xff0c;sql中使用的是mybatis的…

常用的主流音乐编曲软件有哪些?

FL Studio是一款备受音乐人喜爱的超强编曲软件。最新的FL Studio版本将所有音频形式都视为采样&#xff0c;使得它在各个领域都有出色的表现。该软件操作简单&#xff0c;界面友好&#xff0c;非常适合新手全面学习和使用。此外&#xff0c;FL Studio完美支持Windows和Mac操作系…

内存-虚拟地址到物理内存地址转换

虚拟地址的位数 [rootnew ~]# cat /proc/cpuinfo | grep virtu | tail -1 address sizes : 46 bits physical, 48 bits virtual 高性能C之虚拟内存_哔哩哔哩_bilibili 第零层&#xff0c;每一项是4KB 512个4KB是2MB&#xff0c;第一层&#xff0c;每一项是1GB 512个2MB是…

✔ ★【备战实习(面经+项目+算法)】 10.27学习

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…

CVE-2022-32991靶场复现

靶场环境&#xff1a; 题目提示了该CMS的welcome.php中存在SQL注入攻击。 CVE官方给出的提示&#xff1a; welcome.php页面存在SQL注入&#xff0c;并且这个参数是eid 打开靶场环境&#xff1a; 页面是一个登陆注册的界面 用户注册&#xff1a; 1 010.com 123456 123456 点击Re…

多线程---认识线程

文章目录 什么是进程&#xff1f;如何管理进程&#xff1f;认识PCB了解进程调度的过程虚拟地址空间 什么是线程&#xff1f;进程 VS 线程Thread类的属性和方法Thread类的属性Thread类的方法构造方法普通方法 线程的状态 什么是进程&#xff1f; 进程&#xff0c;也叫做“任务”…

ZooKeeper中节点的操作命令(查看、创建、删除节点)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

LLVM学习笔记(56)

4.1.4. DAG合并与合法化 来自SelectionDAGBuilder的SelectionDAG输出还不能进行指令选择&#xff0c;必须通过额外的转换——显示在上图。在指令选择前应用的遍序列如下&#xff1a; 匹配一组节点&#xff0c;在有利时使用更简单的构造来替换它们&#xff0c;DAG合并遍优化Se…

信息学奥赛一本通2061:【例1.2】梯形面积

2061&#xff1a;【例1.2】梯形面积 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 172550 通过数: 68183 【题目描述】 在梯形中阴影部分面积是150平方厘米&#xff0c;求梯形面积。 【输入】 (无&#xff09; 【输出】 输出梯形面积&#xff08;保留两位小数&a…

产品经理必看!提升效率的9款工具盘点,你都用过哪些?

产品经理是一款产品的灵魂人物&#xff0c;除了洞察用户需求和制定解决方案&#xff0c;每天还要腾出精力来协调各种资源&#xff0c;对接产品用户和内部多个部门&#xff0c;推动产品持续向前迭代。无论如何安排时间&#xff0c;大多数产品经理都没有足够的时间来处理他们的任…

本机spark 通idea连接Oracle的坑

1. 报错&#xff1a;Exception in thread "main" java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V 查询网上资料&#xff0c;是idea引入的scala运行环境版本与idea默认的scala版本不一样 也就是写的项目中的pom的spark版本与idea默认的版本不…

虚拟机安装openEuler系统

openEuler操作系统简介&#xff1a; openEuler是一款开源操作系统。当前openEuler内核源于Linux&#xff0c;支持鲲鹏及其他多种处理器&#xff0c;能够充分释放计算芯片的潜能&#xff0c;是由全球开源贡献者构建的高效、稳定、安全的开源操作系统&#xff0c;适用于数据库、大…

MySQL主从复制(基于binlog日志方式)

目录 一、什么是主从复制&#xff1f;二、主从复制原理、存在问题和解决方法2.1.主从复制原理2.2.主从复制存在的问题以及解决办法2.3.主从复制的同步模型2.4.拓展—Mysql并行复制 三、主从复制之基于binlog日志方式3.1.bin-log日志简介3.2.bin-log的使用3.2.1.开启binlog3.2.2…

软考系统架构师知识点集锦三:软件架构设计

一、考情分析 二、考点精讲 2.1软件架构的概念 2.1.1什么是架构(暂无定论) 架构设计就是需求分配&#xff0c;即将满足需求的职责分配到组件上。 软件架构风格是描述某-特定应用领域中系统组织方式的惯用模式。架构风格定义-个系统家族,即一个体系结构定义一个词汇表和一组约…

项目沟通管理案例题

1.规划沟通管理 没进行规划沟通管理 沟通管理计划不能一人制定 沟通管理计划内容不全 沟通管理计划完成后没有邀请有关干系人确认评审 制定沟通管理计划没有结合项目实际情况&#xff0c;只参考了以往的文件制定 项目经理对沟通管理经验不足 2.管理沟通 没做管理沟通 …

ps2024滤镜插件Portraiture

Photoshop 是最常用到的综合性的设计工具&#xff0c;虽然PS一直在迭代升级&#xff0c;但是在细节功能上&#xff0c;PS总是无法完全满足全部所有的用户需求&#xff0c;今天coco玛奇朵推荐一个个截至目前最受欢迎的免费的PS插件&#xff0c;有了这些功能扩展的插件后PS如虎添…

DC电源模块高功率元器件的散热问题

BOSHIDA DC电源模块高功率元器件的散热问题 随着电子产品的普及和发展&#xff0c;DC电源模块的应用越来越广泛&#xff0c;而高功率元器件的散热问题也变得日益重要。这是因为高功率元器件在工作时会消耗大量的电能&#xff0c;产生大量的热量&#xff0c;如果不能及时有效地…