对于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覆盖上这个遮罩
最终效果: