创建一个带有原生阴影的弹出窗口小部件

问题描述 投票:0回答:1

我使用的是 KDE Plasma 6.0.2 + Wayland。我需要创建一个继承自

QWidget
并设置了
Qt::Popup
窗口标志并具有自然阴影(即阴影由窗口管理器绘制)的小部件。实际上,我可以从
QMenu
继承我的小部件(它继承自
QWidget
并设置了
Qt::Popup
窗口标志),但是有很多我不需要的方法。问题是我的自定义小部件(再次继承自带有
QWidget
窗口标志设置的
Qt::Popup
)没有自然阴影,而
QMenu
有。我不明白为什么,因为它们本质上是两个相似的类。

qwidget qt6
1个回答
0
投票

明白了。在 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);
    }
};

详情请参阅此处

© www.soinside.com 2019 - 2024. All rights reserved.