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

2023-10-27 23:20

本文主要是介绍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元素的外观和布局,包括颜色、字体、边框、背景等。

这篇关于QWidget|QFrame设置背景透明且可以带有边框颜色的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/289097

相关文章

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的