From e9c4516f0fa71267879ab05b0f92f58b2afb44c8 Mon Sep 17 00:00:00 2001 From: brige Date: Fri, 21 Nov 2025 01:47:01 +0800 Subject: [PATCH] modify dialog frame --- src/common/RecourceHelper.cpp | 2 ++ src/config/skin/default.qss | 5 +++++ src/ui/Dialog.cpp | 34 ++++++++++++++++++++++++++++++---- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/common/RecourceHelper.cpp b/src/common/RecourceHelper.cpp index 37ffc277..b85d170e 100644 --- a/src/common/RecourceHelper.cpp +++ b/src/common/RecourceHelper.cpp @@ -76,6 +76,8 @@ void RecourceHelper::ChangeSkin(const QString& skin) { if (file.open(QFile::ReadOnly | QFile::Text)) { QTextStream stream(&file); QString qss = stream.readAll(); + qss += "\nDialogTitleBar{border-top-left-radius:10px;border-top-right-radius:10px;}\n"; + qss += "QWidget#DialogContainer{border-radius:10px;background: palette(window);}\n"; qApp->setStyleSheet(qss); file.close(); } diff --git a/src/config/skin/default.qss b/src/config/skin/default.qss index 259c2cec..231ff858 100644 --- a/src/config/skin/default.qss +++ b/src/config/skin/default.qss @@ -11,6 +11,11 @@ FrameTitleBar{ border-top-right-radius:10px; } +QWidget#DialogContainer { + border-radius:10px; + background: #212F3C; +} + QFrame>QLabel#sys_icon { max-width:24px; min-width:24px; diff --git a/src/ui/Dialog.cpp b/src/ui/Dialog.cpp index 4b490c42..21d4b074 100644 --- a/src/ui/Dialog.cpp +++ b/src/ui/Dialog.cpp @@ -3,6 +3,8 @@ #include #include #include +#include +#include #include "FrameTitleBar.h" #include "FramelessDelegate.h" @@ -50,12 +52,36 @@ bool Dialog::nativeEvent(const QByteArray& eventType, void* message, qintptr* re } void Dialog::paintEvent(QPaintEvent* event) { - QStyleOption opt; - opt.initFrom(this); - + Q_UNUSED(event); + this->setAutoFillBackground(false); QPainter p(this); - style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); + p.setCompositionMode(QPainter::CompositionMode_Source); + p.fillRect(rect(), Qt::transparent); } void Dialog::InitFrame() { + setAttribute(Qt::WA_TranslucentBackground, true); + if (ui_ && ui_->verticalLayout && ui_->titleBar && ui_->mianWidget) { + ui_->verticalLayout->setContentsMargins(12, 12, 12, 12); + + QWidget* container = new QWidget(this); + container->setObjectName("DialogContainer"); + container->setAutoFillBackground(true); + container->setAttribute(Qt::WA_StyledBackground, true); + QVBoxLayout* containerLayout = new QVBoxLayout(container); + containerLayout->setSpacing(0); + containerLayout->setContentsMargins(0, 0, 0, 0); + + ui_->verticalLayout->removeWidget(ui_->titleBar); + ui_->verticalLayout->removeWidget(ui_->mianWidget); + containerLayout->addWidget(ui_->titleBar); + containerLayout->addWidget(ui_->mianWidget); + ui_->verticalLayout->addWidget(container); + + auto *shadow = new QGraphicsDropShadowEffect(this); + shadow->setBlurRadius(24); + shadow->setColor(QColor(0, 0, 0, 100)); + shadow->setOffset(0, 8); + container->setGraphicsEffect(shadow); + } }