我使用的是 KDE Plasma 6.0.2 + Wayland。我需要创建一个继承自
QWidget
并设置了 Qt::Popup
窗口标志并具有自然阴影(即阴影由窗口管理器绘制)的小部件。实际上,我可以从 QMenu
继承我的小部件(它继承自 QWidget
并设置了 Qt::Popup
窗口标志),但是有很多我不需要的方法。问题是我的自定义小部件(再次继承自带有 QWidget
窗口标志设置的 Qt::Popup
)没有自然阴影,而 QMenu
有。我不明白为什么,因为它们本质上是两个相似的类。
明白了。在 Plasma 6 中,弹出窗口小部件下是否存在阴影取决于当前样式。对于 Breeze 样式(Plasma 6 的默认样式),您需要添加动态属性
_KDE_NET_WM_FORCE_SHADOW
并将其设置为 true
:
class CustomPopup : public QWidget
{
Q_OBJECT
public:
explicit CustomPopup(QWidget *parent = nullptr)
: QWidget(parent, Qt::Popup)
{
setProperty("_KDE_NET_WM_FORCE_SHADOW", true);
}
};
详情请参阅此处。