Qt 窗口强制禁用系统阴影(自定义菜单)

解决方法

当只使用Qt::FramelessWindowHint时,不会显示系统阴影,因为自定义菜单一般都会添加Qt::Popup,添加Qt::Popup后系统会默认添加阴影效果。

在添加Qt::Popup后,继续添加Qt::NoDropShadowWindowHint枚举解决。

 

最小复现代码:

    QDialog *dia = new QDialog();
    dia->setWindowFlags(Qt::FramelessWindowHint|Qt::Popup);
    setAttribute(Qt::WA_TranslucentBackground);
    setAttribute(Qt::WA_StyledBackground);
    setAttribute(Qt::WA_DeleteOnClose);
    dia->setStyleSheet("background: white;");
    dia->show();

 

 发现窗口四周有阴影,当添加Qt::NoDropShadowWindowHint后解决:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
QDialog *dia = new QDialog();
dia->setAttribute(Qt::WA_TranslucentBackground);
dia->setAttribute(Qt::WA_StyledBackground);
dia->setAttribute(Qt::WA_DeleteOnClose);
dia->setWindowFlags(Qt::FramelessWindowHint|Qt::Popup|<strong>Qt::NoDropShadowWindowHint</strong>);
 
QWidget *wid = new QWidget();
wid->setStyleSheet("background: red;");
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(wid);
layout->setMargin(15);
dia->setLayout(layout);
dia->setGeometry(this->pos().x(), this->pos().y(), 100, 200);
dia->show();

  

 

 

 

 

 

问题背景

 

Windows 默认情况下开启阴影,这就导致使用Qt做的一些透明背景自定义菜单显示不正常(例如椭圆角的菜单):

没设置系统阴影时显示正常:

 设置系统阴影后:

 主要原因是由于菜单四周是圆角,Windows窗口又不支持圆角,只能父窗口透明,子窗口圆角显示:

 

最终效果:

 

posted @   耿明岩  阅读(77)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
希望能帮助到你,顺利解决问题! ...G(^_−)☆
点击右上角即可分享
微信分享提示