这是最终的效果
头文件:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPropertyAnimation>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
protected:
virtual void paintEvent(QPaintEvent *event) override;
virtual void mouseMoveEvent(QMouseEvent *event) override;
virtual void mousePressEvent(QMouseEvent *event) override;
virtual void mouseReleaseEvent(QMouseEvent *event) override;
virtual void resizeEvent(QResizeEvent *event);
private:
void showMenu();
void hideMenu();
private:
Ui::Widget *ui;
bool mIsHoveringOnCloseButton;
bool mIsHoveringOnMenuButton;
bool mIsPressed;
QPointF mPressedPos;
QWidget* mMenu;
QPropertyAnimation * mMenuAnim;
};
#endif // WIDGET_H
CPP文件
#include "Widget.h"
#include "ui_Widget.h"
#include <QPaintEvent>
#include <QPainter>
#include <QDebug>
#include <QVBoxLayout>
#include <QLabel>
#define UpdateAccept \
{
update();event->accept();return;}
Widget::Widget(QWidget *parent)