目录
0.背景
windows + qt5.12 + c++
我有一个自定义的 QWidget ,名为 BCI_MessageBox ,继承自QWidget,想实现它的圆角+边框
实现图如下(里面都是自定义的按钮,不重要)

实现思路:重写保护函数 【paintEvent】,通过位图遮罩将窗口裁剪为圆角矩形;然后再加一些样式设置边框即可;
1.详细代码
.h头文件
cpp
protected:
void paintEvent(QPaintEvent *event);
.cpp实现
cpp
void BCI_MessageBox::paintEvent(QPaintEvent *event)
{
QStyleOption opt;
opt.initFrom(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);//绘制样式
QBitmap bmp(this->size());
bmp.fill();
QPainter painter(&bmp);
painter.setPen(Qt::NoPen);
painter.setBrush(Qt::black);
painter.setRenderHint(QPainter::Antialiasing);
//设置边框为圆角12px
painter.drawRoundedRect(bmp.rect(), 10, 10);
setMask(bmp);
QWidget::paintEvent(event);
}
构造函数设置样式
【隐藏标题栏 + 白色边框、圆角】
cpp
this->setWindowFlags(Qt::Widget|Qt::FramelessWindowHint);
setStyleSheet("BCI_MessageBox{border:1px solid #FFFFFF;background:#242424;border-radius:10px;}");
--END--