feat: 添加ElaWidgetTool库

This commit is contained in:
sleepwithoutbz
2025-09-19 22:40:52 +08:00
parent 5f93e8caf6
commit 4eef5c7fd5
407 changed files with 36325 additions and 7 deletions

View File

@@ -0,0 +1,190 @@
#include "ElaContentDialog.h"
#include <ElaPushButton.h>
#include "ElaMaskWidget.h"
#include "ElaText.h"
#include "ElaTheme.h"
#include "ElaWinShadowHelper.h"
#include "private/ElaContentDialogPrivate.h"
#include <QApplication>
#include <QGuiApplication>
#include <QHBoxLayout>
#include <QKeyEvent>
#include <QPainter>
#include <QScreen>
#include <QTimer>
#include <QVBoxLayout>
Q_TAKEOVER_NATIVEEVENT_CPP(ElaContentDialog, d_func()->_appBar);
ElaContentDialog::ElaContentDialog(QWidget* parent)
: QDialog{parent}, d_ptr(new ElaContentDialogPrivate())
{
Q_D(ElaContentDialog);
d->q_ptr = this;
d->_maskWidget = new ElaMaskWidget(parent);
d->_maskWidget->move(0, 0);
d->_maskWidget->setFixedSize(parent->size());
d->_maskWidget->setVisible(false);
resize(400, height());
setWindowModality(Qt::ApplicationModal);
d->_appBar = new ElaAppBar(this);
d->_appBar->setWindowButtonFlags(ElaAppBarType::NoneButtonHint);
d->_appBar->setIsFixedSize(true);
d->_appBar->setAppBarHeight(0);
#ifdef Q_OS_WIN
// 防止意外拉伸
createWinId();
#endif
d->_leftButton = new ElaPushButton("cancel", this);
connect(d->_leftButton, &ElaPushButton::clicked, this, [=]() {
Q_EMIT leftButtonClicked();
onLeftButtonClicked();
d->_doCloseAnimation(false);
});
d->_leftButton->setMinimumSize(0, 0);
d->_leftButton->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
d->_leftButton->setFixedHeight(38);
d->_leftButton->setBorderRadius(6);
d->_middleButton = new ElaPushButton("minimum", this);
connect(d->_middleButton, &ElaPushButton::clicked, this, [=]() {
Q_EMIT middleButtonClicked();
onMiddleButtonClicked();
});
d->_middleButton->setMinimumSize(0, 0);
d->_middleButton->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
d->_middleButton->setFixedHeight(38);
d->_middleButton->setBorderRadius(6);
d->_rightButton = new ElaPushButton("exit", this);
connect(d->_rightButton, &ElaPushButton::clicked, this, [=]() {
Q_EMIT rightButtonClicked();
onRightButtonClicked();
d->_doCloseAnimation(true);
});
d->_rightButton->setLightDefaultColor(ElaThemeColor(ElaThemeType::Light, PrimaryNormal));
d->_rightButton->setLightHoverColor(ElaThemeColor(ElaThemeType::Light, PrimaryHover));
d->_rightButton->setLightPressColor(ElaThemeColor(ElaThemeType::Light, PrimaryPress));
d->_rightButton->setLightTextColor(Qt::white);
d->_rightButton->setDarkDefaultColor(ElaThemeColor(ElaThemeType::Dark, PrimaryNormal));
d->_rightButton->setDarkHoverColor(ElaThemeColor(ElaThemeType::Dark, PrimaryHover));
d->_rightButton->setDarkPressColor(ElaThemeColor(ElaThemeType::Dark, PrimaryPress));
d->_rightButton->setDarkTextColor(Qt::black);
d->_rightButton->setMinimumSize(0, 0);
d->_rightButton->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
d->_rightButton->setFixedHeight(38);
d->_rightButton->setBorderRadius(6);
d->_centralWidget = new QWidget(this);
QVBoxLayout* centralVLayout = new QVBoxLayout(d->_centralWidget);
centralVLayout->setContentsMargins(15, 25, 15, 10);
ElaText* title = new ElaText("退出", this);
title->setTextStyle(ElaTextType::Title);
ElaText* subTitle = new ElaText("确定要退出程序吗", this);
subTitle->setTextStyle(ElaTextType::Body);
centralVLayout->addWidget(title);
centralVLayout->addSpacing(2);
centralVLayout->addWidget(subTitle);
centralVLayout->addStretch();
d->_mainLayout = new QVBoxLayout(this);
d->_mainLayout->setContentsMargins(0, 0, 0, 0);
d->_buttonWidget = new QWidget(this);
d->_buttonWidget->setFixedHeight(60);
QHBoxLayout* buttonLayout = new QHBoxLayout(d->_buttonWidget);
buttonLayout->addWidget(d->_leftButton);
buttonLayout->addWidget(d->_middleButton);
buttonLayout->addWidget(d->_rightButton);
d->_mainLayout->addWidget(d->_centralWidget);
d->_mainLayout->addWidget(d->_buttonWidget);
d->_themeMode = eTheme->getThemeMode();
connect(eTheme, &ElaTheme::themeModeChanged, this, [=](ElaThemeType::ThemeMode themeMode) {
d->_themeMode = themeMode;
});
}
ElaContentDialog::~ElaContentDialog()
{
Q_D(ElaContentDialog);
d->_maskWidget->deleteLater();
}
void ElaContentDialog::onLeftButtonClicked()
{
}
void ElaContentDialog::onMiddleButtonClicked()
{
}
void ElaContentDialog::onRightButtonClicked()
{
}
void ElaContentDialog::setCentralWidget(QWidget* centralWidget)
{
Q_D(ElaContentDialog);
d->_mainLayout->takeAt(0);
d->_mainLayout->takeAt(0);
delete d->_centralWidget;
d->_centralWidget = centralWidget;
d->_mainLayout->addWidget(centralWidget);
d->_mainLayout->addWidget(d->_buttonWidget);
}
void ElaContentDialog::setLeftButtonText(QString text)
{
Q_D(ElaContentDialog);
d->_leftButton->setText(text);
}
void ElaContentDialog::setMiddleButtonText(QString text)
{
Q_D(ElaContentDialog);
d->_middleButton->setText(text);
}
void ElaContentDialog::setRightButtonText(QString text)
{
Q_D(ElaContentDialog);
d->_rightButton->setText(text);
}
void ElaContentDialog::close()
{
Q_D(ElaContentDialog);
d->_doCloseAnimation(false);
}
void ElaContentDialog::showEvent(QShowEvent* event)
{
Q_D(ElaContentDialog);
d->_maskWidget->setVisible(true);
d->_maskWidget->raise();
d->_maskWidget->setFixedSize(parentWidget()->size());
d->_maskWidget->doMaskAnimation(90);
QDialog::showEvent(event);
}
void ElaContentDialog::paintEvent(QPaintEvent* event)
{
Q_D(ElaContentDialog);
QPainter painter(this);
painter.save();
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
painter.setPen(Qt::NoPen);
painter.setBrush(ElaThemeColor(d->_themeMode, DialogBase));
// 背景绘制
painter.drawRect(rect());
// 按钮栏背景绘制
painter.setBrush(ElaThemeColor(d->_themeMode, DialogLayoutArea));
painter.drawRoundedRect(QRectF(0, height() - 60, width(), 60), 8, 8);
painter.restore();
}
void ElaContentDialog::keyPressEvent(QKeyEvent* event)
{
event->accept();
}