QTフチなしウィンドウの角丸を実現

オプション 1

コードで実現し、最初にウィンドウ フレームを削除してから、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
}

オプション II

コードで実現し、最初にウィンドウの境界線を削除し、スタイルを設定して完了し、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);
}

さて、上記は私たちが実装した2つの方法であり、誰もが自分の状況に応じて使用できます.

おすすめ

転載: blog.csdn.net/houxian1103/article/details/129519943