此处提供一种简单有效的 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);