Files

146 lines
4.6 KiB
C++

#include <QDialog>
#include <qpushbutton.h>
#include <qlayout.h>
#include <globalStruct.h>
#include <qtimer.h>
#include <qlabel.h>
#include <uiModule/components/fancyButton.h>
#include <qdatetime.h>
class fancyDialog :public QDialog
{
public:
QLabel* detailLabel;
QPushButton* closeBtn = new QPushButton(this);
QVBoxLayout* funcBtnLayout;
fancyDialog(QString title, QString detail, bool Show)
{
QPalette paletteWhite, paletteRed, paletteGreen;
paletteWhite.setColor(QPalette::WindowText, Qt::white);
paletteRed.setColor(QPalette::WindowText, Qt::red);
paletteGreen.setColor(QPalette::WindowText, Qt::green);
QFont font("微软雅黑", 16, QFont::Bold);
QFont font2("微软雅黑", 18, QFont::Bold);
QFont font3("微软雅黑", 12, QFont::Bold);
this->setObjectName("warnDialog");
this->setStyleSheet(QString("QDialog#warnDialog {"
"background-color: rgb(%1);"
"border: 1px solid black;"
"border-radius: 1px;}").arg(sColor_blue));
this->setWindowFlags(Qt::FramelessWindowHint); // 设置无边框的样式
this->setFixedSize(QSize(480, 320));
QGridLayout* layout = new QGridLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
QWidget* menuBarWidget = new QWidget();//第一层QWidget
menuBarWidget->setStyleSheet(QString("QWidget { background-color: black;"
"border: 0px solid red;" // 显式设置边框
"border-radius: 0px;" // 设置边框半径为0,确保没有圆角
"}"));
menuBarWidget->setFixedHeight(35);
menuBarWidget->setFixedWidth(480);
QHBoxLayout* menuBarLayout = new QHBoxLayout(menuBarWidget);
menuBarLayout->setContentsMargins(0, 0, 0, 0);
QHBoxLayout* menuBarLayoutLeft = new QHBoxLayout();
menuBarLayoutLeft->setContentsMargins(0, 0, 0, 0);
menuBarLayoutLeft->setAlignment(Qt::AlignLeft);
QHBoxLayout* menuBarLayoutRight = new QHBoxLayout();
menuBarLayoutRight->setContentsMargins(0, 0, 0, 0);
menuBarLayoutRight->setAlignment(Qt::AlignRight);
menuBarLayout->addLayout(menuBarLayoutLeft);
menuBarLayout->addLayout(menuBarLayoutRight);
closeBtn->setIcon(QPixmap(":/topBar/icon/close.png")); // 设置图标
closeBtn->setFixedHeight(35);
closeBtn->setStyleSheet(QString("QPushButton { background-color: transparent;"
"border: 0px solid red;" // 显式设置边框
"border-radius: 0px;" // 设置边框半径为0,确保没有圆角
"}"
"QPushButton:focus {"
" outline: none;"
"}"
"QPushButton:hover { background-color: rgb(%1); }").arg(sColor_Red)); // 设置透明背景和悬停时的背景色
closeBtn->setFixedHeight(35);
closeBtn->setFixedWidth(50);
menuBarLayoutRight->addWidget(closeBtn);
QObject::connect(closeBtn, &QPushButton::clicked, this, &QDialog::close);
layout->addWidget(menuBarWidget, 0, 0);
QLabel* titleLabel = new QLabel(title);
titleLabel->setFont(font2);
titleLabel->setPalette(paletteWhite);
titleLabel->setAlignment(Qt::AlignCenter);
titleLabel->setWordWrap(true);
layout->addWidget(titleLabel, 1, 0);
detailLabel = new QLabel(detail);
detailLabel->setFont(font3);
detailLabel->setPalette(paletteWhite);
detailLabel->setAlignment(Qt::AlignCenter);
detailLabel->setWordWrap(true);
layout->addWidget(detailLabel, 2, 0);
funcBtnLayout = new QVBoxLayout();
funcBtnLayout->setAlignment(Qt::AlignHCenter);
//funcBtnLayout->addWidget(continueBtn, 3, 0);
layout->addLayout(funcBtnLayout, 3, 0);
this->setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint);
if (Show == true)
this->show();
else
this->hide();
}
void setDetailText(QString text)
{
detailLabel->setText(text);
}
private:
bool isMoving = false;
//窗口移动
#pragma region 窗口移动变量
QPoint startPos;
QRect startFrameGeometry;
QTime lastWindowMoveTime;
int freshDelay = 1000 / windowMoveFreshRate;
bool setNormalAndMove = false;//判断是否从最大化开始移动
#pragma endregion
protected:
void mousePressEvent(QMouseEvent* event) override {
if (event->pos().y() > 35)
return;
if (event->button() == Qt::LeftButton) {
startPos = event->globalPos();
startFrameGeometry = frameGeometry();
isMoving = true;
lastWindowMoveTime.start(); // 按下时开始计时
}
QDialog::mousePressEvent(event);
}
void mouseMoveEvent(QMouseEvent* event) override {
if (event->buttons() == Qt::LeftButton && isMoving) {
QPoint pos = event->globalPos();
if (std::max(std::abs(pos.x() - startPos.x()), std::abs(pos.y() - startPos.y())) > 10)
if (lastWindowMoveTime.elapsed() > freshDelay)//每秒刷新100次
{
lastWindowMoveTime.restart();
move(startFrameGeometry.topLeft() + (event->globalPos() - startPos));
}
}
QDialog::mouseMoveEvent(event);
}
void mouseReleaseEvent(QMouseEvent* event) override {
if (event->button() == Qt::LeftButton) {
isMoving = false;
}
QDialog::mouseReleaseEvent(event);
}
};
#pragma once