QT 无边窗口圆角实现

方案一

通过代码实现,首先是去掉了窗口边框,然后要在 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);
}

好了,上边就是我们实现的两种方式,大家根据自己的情况来使用吧。

猜你喜欢

转载自blog.csdn.net/houxian1103/article/details/129519943