Qt实现QWidgets窗口圆角效果

发布时间 2023-09-09 14:42:21作者: IZWB-003

对于Qt里其它多数控件,我们可以直接通过设置qss border-radius: ?px;的方式来实现圆角。

而我们最常用的窗口QWidget的qss却并不支持这一属性。

StackOverFlow上的大佬@hank则给出了一种使用QPainter和遮罩的解决方式:

首先#include <QPainterPath>,然后构造你的QWidget。在下文中我用this指它。
很多时候想必您需要给它设置Qt::FramelessWindowHint的WindowFlags让它更美观。

QPainterPath PainterPath;	//绘制一个QPainter路径对象
PainterPath.addRoundedRect(this->rect(), 10, 10);	//对它设置路径为四周圆角。10即圆角的深度,可以修改
QRegion mask = QRegion(PainterPath.toFillPolygon().toPolygon());	//创建遮罩对象,内容即该QPainter路径
this->setMask(mask);	//为QWidget覆盖上这个遮罩

最终效果:
image