一、设计简介
1.悬浮球功能
该设计具备悬浮球功能,能够始终显示在屏幕最上方,并且能够对该悬浮球进行拖拽,能够在屏幕上拖拽到任意地方。如下图所示:

2.悬浮菜单功能
该设计具备悬浮菜单功能,能够始终保持菜单显示在屏幕最上方,并且能够对悬浮菜单进行拖拽,在拖拽过程中能够始终保持菜单状态。如下图所示:

对菜单选择的弧形选择器进行点击便能够展示出对应的功能页面,对于不同的项目来说只需要针对不同的项目需求进行更换图标和说明文字即可实现嵌入复用。
3.模式转换功能
对于菜单选择模式和悬浮球模式之间能进行任意时间和状态下的切换,悬浮球与菜单选择之间是互通的,并且有多种方式可以进行切换。
在悬浮球状态下,鼠标在悬浮球上停留两秒即可转换为菜单选择模态,同时也可以双击悬浮球转换为菜单悬着模态,不过在此种状态下,鼠标脱离悬浮菜单即会恢复到悬浮球状态。
若想要始终保持在悬浮菜单模态,可通过右键菜单将悬浮球始终转换为菜单选择模态,同时也可以通过右键菜单转换为悬浮球模态。
4.系统托盘功能
对于该设计,还具备系统托盘的显示及提示功能,对于不同的项目而言,修改不同的图标资源和提示信息即可套用。

5.右键菜单功能
该设计对于各类状态下都可进行右键菜单唤出功能:
①悬浮球下

对于此状态下可以右键唤出菜单,对于菜单中各项功能做如下介绍:
1、信息展开
信息展开可以将悬浮球状态下的整个电脑主机的cpu利用率和内存利用率展开来看,并且也能看到系统运行时间。
2、菜单模式
通过点击菜单模式,即可如上文所说的那样,将悬浮球模态转换到悬浮菜单模态,并且始终保持为悬浮菜单。
3、精灵球隐藏
通过点击精灵球隐藏,即可将精灵球掉,后续若想将其显示,则可通过底部托盘图标的右键菜单将其唤出。
4、退出
通过点击退出按钮即可将整个系统退出。
②悬浮菜单下

悬浮菜单模态下菜单功能与悬浮球下基本一致,只是在模态更换时会更换为悬浮球模态。
③系统托盘下

对于此状态下可以右键唤出菜单,对于菜单中各项功能做如下介绍:
1、召唤显示各个功能页面
对于“仿真平台”“数据管理”“评估分析”“用户管理”按钮点击即会唤出对应的功能页面,并展示在屏幕顶部。
2、隐藏(显示)悬浮球/悬浮菜单
对于显示的悬浮球/悬浮菜单能够隐藏起来,对于隐藏的悬浮球/悬浮菜单能够显出出来。
3、退出程序
对于运行的系统,可以通过此方法结束进程或退出。
6.动画弹出功能
(1)悬浮球下菜单弹出
在悬浮球模态下,当鼠标在悬浮球下停留两秒且不做任何操作时,悬浮球即会展开外部菜单,当鼠标脱离悬浮菜单时,悬浮球也会收缩外部菜单。
(2)进入菜单选择时弹出
当展开菜单时,当鼠标进入外部菜单选择时,被选择的外部菜单会随着鼠标的进入而进行弹出动画,同时当鼠标退出此选择时,外部菜单也会收缩。


7.系统利用率和计时功能
对悬浮球模态下,可以对window系统的cpu利用率和内存利用率进行监控,并且对系统运行时间进行展示。

在此模态下,还可以通过右键唤出菜单对该信息进行展示和隐藏。
二、设计主体代码
本设计的主题主要是通过Soliquidn类实现的,具体代码如下:
1、Soliquidn.h
#ifndef SOLIQUIDN_H
#define SOLIQUIDN_H
#include <QObject>
#include <QMouseEvent>
#include <QPainter>
#include <QLabel>
#include <QDebug>
#include <QWidget>
#include <QtMath>
#include <QDateTime>
#include <QMenu>
#include <QElapsedTimer>
#include <QEnterEvent>
#include <QPropertyAnimation>
#include <QTime>
#include <Windows.h>
#include "ccpuusage.h"
/*********圆弧结构体***********/
struct ringPos{
QPoint inPosFist;
QPoint outPosFist;
QPoint inPosSec;
QPoint outPosSec;
};
#define SIZEOFMENU 4
class Soliquidn : public QWidget
{
Q_OBJECT
Q_PROPERTY(int shift READ Shift WRITE setShift) //内圆动画属性注册
Q_PROPERTY(int shift1 READ Shift1 WRITE setShift1) //圆弧动画属性注册
Q_PROPERTY(int shift2 READ Shift2 WRITE setShift2) //圆弧动画属性注册
Q_PROPERTY(int shift3 READ Shift3 WRITE setShift3) //圆弧动画属性注册
Q_PROPERTY(int shift4 READ Shift4 WRITE setShift4) //圆弧动画属性注册
public:
Soliquidn(QWidget *parent = nullptr);
~Soliquidn();
CCPUUsage cpuUsage; //CPU和RAM利用率获取接口类对象
/**
* @brief updateElapsedTime 系统运行事件更新方法
*
* @return QString 时间字符串
*/
QString updateElapsedTime();
/**
* @brief degreesToRadians 角度转弧度方法
* @param degrees 角度
*
* @return double 弧度
*/
double degreesToRadians(double degrees);
//类属性注册,方法声明
int Shift();
void setShift(int value);
int Shift1();
void setShift1(int value);
int Shift2();
void setShift2(int value);
int Shift3();
void setShift3(int value);
int Shift4();
void setShift4(int value);
void setWindowStartP(QPoint value);
//系统下各功能页面的管理对象 zzdkSystem
QVector<QWidget*> zzdkSystem;
QStringList windowTitle{"仿真平台","数据管理","评估分析","用户管理"};
/**
* @brief setMouseEventsEnabled mousePress锁机制
* @param enabled 锁标志
*
* @return void
*/
void setMouseEventsEnabled(bool enabled);
protected:
//虚函数重写
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void paintEvent(QPaintEvent *event) override;
void enterEvent(QEvent *event) override;
void leaveEvent(QEvent *event) override;
void timerEvent(QTimerEvent *event) override;
void mouseDoubleClickEvent(QMouseEvent *event) override;
private:
//鼠标右键按钮声明
QAction *amplify; //展开
QAction *Hide; //隐藏
QAction *Maintain; //保持菜单栏模式
QAction *Exit; //退出
QPropertyAnimation* animation; //动画
QPropert