程序窗口的边框,标题栏等是系统管理的,Qt 不能对其进行定制,为了实现定制的边框、标题栏、关闭按钮等,需要把系统默认的边框、标题栏去掉,然后使用 Widget 来模拟它们。这里介绍使用 QSS + QGraphicsDropShadowEffect
来创建圆角、无边框、有阴影、可拖动的窗口。
核心技术要点:
启用 QSS:
setAttribute(Qt::WA_StyledBackground, true)
我们继承 QWidget 实现的 Widget 默认是不启用 QSS 的,为了启用 QSS,需要调用
setAttribute(Qt::WA_StyledBackground, true)
使用
border-radius
创建圆角效果顶级窗口有些 QSS 不生效,例如
border-radius
,所以把要显示圆角的 Widget 上放在另一个顶级 Widget 中,变为非顶级窗口顶级窗口需要去掉边框,背景设置为透明
- 去掉边框:
setWindowFlags(Qt::FramelessWindowHint);
- 背景透明:
setAttribute(Qt::WA_TranslucentBackground);
- 去掉边框:
使用鼠标事件实现拖动
使用
QGraphicsDropShadowEffect
创建阴影很遗憾,QSS 不支持阴影