QMenu自定义阴影效果

此处提供一种简单有效的 QMenu 自定义阴影效果方案。算是抛砖引玉吧,实际应该有更优雅的做法,日后有空研究了再做更新。

m_menu1 = new QMenu();
m_menu1->setWindowFlags(m_menu1->windowFlags() | Qt::NoDropShadowWindowHint | Qt::FramelessWindowHint);
m_menu1->setAttribute(Qt::WA_TranslucentBackground);
/* XXX:                                                                          
 * 通过 QGraphicsDropShadowEffect 为 menu 添加阴影效果,这要求 menu 设置 margin 属性,             
 * 且 margin 的大小不得小于 blurRadius。                                                  
 * 在 menu 显示时将会抛出警告 “UpdateLayeredWindowIndirect failed ...”; 这是正常的 
 */           
QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect();             
shadow->setBlurRadius(8);                                                        
shadow->setColor(QColor(0, 0, 0, 50));                                           
shadow->setOffset(0);                                                            
m_menu1->setGraphicsEffect(shadow);    
posted @ 2025-12-18 22:11  邓加领  阅读(2)  评论(0)    收藏  举报