オプション 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つの方法であり、誰もが自分の状況に応じて使用できます.