方案一
通过代码实现,首先是去掉了窗口边框,然后要在 PaintEvent 上进行绘制。
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
resize(600, 400);
setAttribute(Qt::WA_TranslucentBackground); //设置窗口背景透明
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint); //去掉窗口边框
}
void MainWidget::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing); // 反锯齿;
painter.setBrush(QBrush(QColor(255, 255, 255)));
painter.setPen(Qt::transparent);
QRect rect = this->rect();
painter.drawRoundedRect(rect, 15, 15); //设置窗口圆角 15px
}
方案二
通过代码实现,首先是去掉了窗口边框,通过设置style 来完成,然后也要在 PaintEvent 上进行绘制。
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
setAttribute(Qt::WA_TranslucentBackground); //设置窗口背景透明
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint); //去掉窗口边框
//this->setStyleSheet("QWidget{background-color:#FFFFFF;border-radius:30px;}");
this->setStyleSheet("QWidget{background-color:#FFFFFF; \
border-top-left-radius:15px; \
border-bottom-right-radius:15px; \
}");
}
void MainWidget::paintEvent(QPaintEvent*)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
好了,上边就是我们实现的两种方式,大家根据自己的情况来使用吧。