无边框窗口添加阴影需要两个窗口,第一个顶层窗口用于显示控件的,第二个是底层窗口用于承载顶层窗口并显示边框阴影。也就是说把底层窗口设置为透明只显示边框阴影,再将顶层窗口放上去形成了有阴影的无边框窗口。
#include <QGraphicsDropShadowEffect>
#include <QVboxLayout>
//设置窗体透明
this->setAttribute(Qt::WA_TranslucentBackground, true);
//设置无边框
this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);
QVBoxLayout* pMainLay = new QVBoxLayout(this);
CLoginRealWidget* pRealWidget = new CLoginRealWidget(this);//这是自己定义的顶层的无边框窗口,如何实现无边框窗口参考本系列文章的第一篇
pMainLay->addWidget(pRealWidget);
pMainLay->setContentsMargins(30, 30, 30, 30);
setLayout(pMainLay);
//给顶层widget设置背景颜色,不然看不见,因为底层widget已经透明了
pRealWidget->setStyleSheet("background-color:rgb(255, 254, 253)");
//Qt窗口阴影类
QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect(this);
//设置阴影距离
shadow->setOffset(0, 0);
//设置阴影颜色 686868
shadow->setColor(QColor("#686868"));
//设置阴影区域
shadow->setBlurRadius(30);
//给顶层QWidget设置阴影
pRealWidget->setGraphicsEffect(shadow);