在使用为顶层窗体添加阴影效果的时候,发现加载了以后没有效果但是子控件在设置阴影的时候就有效果了,折腾了一番发现,可以利用子控件来变相的实现阴影效果。针对FramelessWindow总结了一个解决方案如下:
1.首先顶层窗口得设置为
setWindowFlags(Qt::FramelessWindowHint); //设置为无外部边框
setAttribute(Qt::WA_TranslucentBackground ); //设置窗口为透明
2. 添加一个QLabel作为背景图片
m_pback= new QLabel(this);
m_pback->setGeometry(0,0,this->width()-10,this->height()-10);
m_pback->setObjectName("MainWidget"); //此处设置ObjectName是为了加载qss效果
QGraphicsDropShadowEffect *Shadow = new QGraphicsDropShadowEffect();
Shadow->setBlurRadius(8.0);
Shadow->setColor(QColor(63, 63, 63, 180));
Shadow->setOffset(8.0);
m_pback->setGraphicsEffect(Shadow);
以上的原理是将图片的右边边缘和下部边缘拿出10px来显示阴影效果,因为顶层容器窗口是透明的,所以将作为子控件的背景图片加上阴影显示在透明的窗体边缘。
至此,阴影效果添加完毕