diff --git a/bin/xyylMCWEACSystem.exe b/bin/xyylMCWEACSystem.exe index de764e9..e86dab4 100644 Binary files a/bin/xyylMCWEACSystem.exe and b/bin/xyylMCWEACSystem.exe differ diff --git a/xyylMCWEACSystem/framelesswindow.cpp b/xyylMCWEACSystem/framelesswindow.cpp new file mode 100644 index 0000000..73c043d --- /dev/null +++ b/xyylMCWEACSystem/framelesswindow.cpp @@ -0,0 +1,57 @@ +#include "FramelessWindow.h" + +#include +#include +#include + +struct FramelessWindowPrivate { + FramelessWindowPrivate(QWidget *contentWidget) : contentWidget(contentWidget) {} + + QWidget *contentWidget; + QPoint mousePressedPosition; // 鼠标按下时的坐标 + QPoint windowPositionAsDrag; // 鼠标按小时窗口左上角的坐标 +}; + +FramelessWindow::FramelessWindow(QWidget *contentWidget, QWidget *parent) : QWidget(parent) { + setWindowFlags(Qt::FramelessWindowHint); // 去掉边框 + setAttribute(Qt::WA_TranslucentBackground); // 背景透明 + + d = new FramelessWindowPrivate(contentWidget); + + // 添加阴影 + QGraphicsDropShadowEffect *shadowEffect = new QGraphicsDropShadowEffect(contentWidget); + shadowEffect->setColor(Qt::lightGray); + shadowEffect->setBlurRadius(4); // 阴影的大小 + shadowEffect->setOffset(0, 0); + contentWidget->setGraphicsEffect(shadowEffect); + + // 添加到窗口中 + QGridLayout *lo = new QGridLayout(); + lo->addWidget(contentWidget, 0, 0); + lo->setContentsMargins(4, 4, 4, 4); // 注意和阴影大小的协调 + setLayout(lo); +} + +FramelessWindow::~FramelessWindow() { + delete d; +} + +void FramelessWindow::mousePressEvent(QMouseEvent *e) { + // 记录鼠标按下时全局的位置和窗口左上角的位置 + d->mousePressedPosition = e->globalPos(); + d->windowPositionAsDrag = pos(); +} + +void FramelessWindow::mouseReleaseEvent(QMouseEvent *e) { + Q_UNUSED(e) + // 鼠标放开始设置鼠标按下的位置为 null,表示鼠标没有被按下 + d->mousePressedPosition = QPoint(); +} + +void FramelessWindow::mouseMoveEvent(QMouseEvent *e) { + if (!d->mousePressedPosition.isNull()) { + // 鼠标按下并且移动时,移动窗口, 相对于鼠标按下时的位置计算,是为了防止误差累积 + QPoint delta = e->globalPos() - d->mousePressedPosition; + move(d->windowPositionAsDrag + delta); + } +} diff --git a/xyylMCWEACSystem/framelesswindow.h b/xyylMCWEACSystem/framelesswindow.h new file mode 100644 index 0000000..8b090e3 --- /dev/null +++ b/xyylMCWEACSystem/framelesswindow.h @@ -0,0 +1,23 @@ +#ifndef FRAMELESSWINDOW_H +#define FRAMELESSWINDOW_H + +#include + +struct FramelessWindowPrivate; + +class FramelessWindow : public QWidget { + Q_OBJECT +public: + explicit FramelessWindow(QWidget *contentWidget, QWidget *parent = 0); + ~FramelessWindow(); + +protected: + void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE; + void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE; + +private: + FramelessWindowPrivate *d; +}; + +#endif // FRAMELESSWINDOW_H diff --git a/xyylMCWEACSystem/main.cpp b/xyylMCWEACSystem/main.cpp index e5b250b..7d55032 100644 --- a/xyylMCWEACSystem/main.cpp +++ b/xyylMCWEACSystem/main.cpp @@ -34,13 +34,16 @@ #include #include "navlistwidget.h" +#include "framelesswindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); - FrameWindow mainw; - mainw.resize(1000,800); - mainw.show(); + FrameWindow *mainw = new FrameWindow; + FramelessWindow *window = new FramelessWindow(mainw); + window->resize(300, 400); + window->showMaximized(); + //a.setStyleSheet("QWidget{background-color:#ffffff;}"); // a.setStyleSheet("QWidget{background: rgb(47, 61, 82);}"); QFont globalFont; diff --git a/xyylMCWEACSystem/titlewidget.cpp b/xyylMCWEACSystem/titlewidget.cpp index ccce02f..df56228 100644 --- a/xyylMCWEACSystem/titlewidget.cpp +++ b/xyylMCWEACSystem/titlewidget.cpp @@ -3,6 +3,7 @@ #include #include #include +#include TitleWidget::TitleWidget(QWidget * parent ):QFrame(parent) { init(); @@ -60,9 +61,17 @@ void TitleWidget::initLay() #endif } + bool TitleWidget::initConnect() { + bool bCon = true; + bCon = connect(&m_btnRet,SIGNAL(clicked(bool)),qApp,SLOT(quit())); + if(!bCon) + { + qDebug()<<"connect failed"<