前言:

因为项目需求,现在要做一个窗口停靠功能,故集成于MoveWindow类中


功能需求:

  1. 自定义标签,自定义窗口按钮(关闭,缩小)
  2. 窗口停靠

代码:


enum Direction:quint16{Left = 0x1,Right = 0x2,Top = 0x4,Bottom =0x8,LeftTop = Left|Top,LeftBottom = Left|Bottom,RightTop = Right|Top,RightBottom = Right|Bottom,Disappear= 0x20,Error = 0x40,None = 0x80};
Q_DECLARE_FLAGS(Directions,Direction)Q_DECLARE_OPERATORS_FOR_FLAGS(STOPEDGE::Directions)}

Direction是方向

/*** @brief The MoveWindow class* @note 重写事件*/
class MoveWindow :  public QWidget
{Q_OBJECTpublic:explicit MoveWindow(QWidget *parent = nullptr);~MoveWindow() {}/*** @brief setStopEdgeDirs* @brief 设置可停靠边* @param direction @type STOPEDGE::Directions* @example setStopEdgeDir(STOPEDGE::Direction::Top|STOPEDGE::Direction::Left);//设置桌面左边和上方停靠*/void setStopEdgeDirs(STOPEDGE::Directions directions);/*** @brief setOverEdgeDirs* @brief 设置不可越界边* @param direction* @example setStopEdgeDirs(STOPEDGE::Direction::Bottom);//设置桌面下方不可越界*/void setOverEdgeDirs(STOPEDGE::Directions directions);/*** @static*  @brief getStopEdgeDirs* @brief 获取停靠边* @param widget* @return STOPEDGE::Directions* @example <example>* using STOPEDGE::Directions;* Directions _directions = getStopEdgeDirs(this);* </example>* @author tangyoha*/static STOPEDGE::Directions    getStopEdgeDirs(QWidget * widget);/*** @brief getOverEdgeDirs* @brief 获取越界边* @param widget* @param point @note 可选参数  @brief 为下一个窗口位置* @return* @author tangyoha* @example <example>* using STOPEDGE::Directions;* Directions _directions;* _directions = getOverEdgeDirs(this);* </example>*/static STOPEDGE::Directions   getOverEdgeDirs(QWidget *widget,QPoint nextPos = QPoint(-1,-1));/*** @brief getScreensAt* @brief 获取widget所在屏幕* @return QScreen ** @example <example>* using STOPEDGE::Directions;* Directions _directions;* _directions = getOverScreensAt(this);*/inline static auto getScreensAt(QWidget *) ->const QScreen*;bool isMouseInWidget(QWidget *widget,QPoint MousePos);bool getBStopEdge() const;void setBStopEdge(bool BStopEdge);signals:void mainFormMoved(QPoint);//窗口移动了void overEdge(STOPEDGE::Direction);//窗口靠桌面边缘void rePosition(STOPEDGE::Directions);
public slots:void onStopEdgeChange(bool bStopEdgeChange);/*** @brief onMousePress* @brief 鼠标按下事件* @param event*/void onMousePress(QMouseEvent * event);/*** @brief onMouseRelease* @brief 重写鼠标松开事件* @param event*/void onMouseRelease(QMouseEvent *event);/*** @brief onMouseMove* @brief 重写鼠标移动事件* @param event*/void  onMouseMove(QMouseEvent *event);void onEnter(QEvent *event);void onLeave(QEvent *event);void onActivationChange(QEvent *event);void onShow(QShowEvent *event);
private:bool isDragRect(QPoint point);//是否为可拖拽位置STOPEDGE::Directions m_OverEdge;STOPEDGE::Directions m_DStopEdge;//拖拽的坐标QPoint m_DragPosition;bool m_BStopEdge = false;//未停靠
protected:/*** @brief getDragWidget* @brief 由子类确定可拖拽的窗口位置* @return*//*** @brief getDragWidget* @return*/virtual QWidget *getDragWidget() = 0;//是否可以移动bool bMoved;protected slots:virtual void onWidgetStopEdge(STOPEDGE::Directions directions){Q_UNUSED(directions); }virtual void onThemeColorChange(QString colorStr){Q_UNUSED(colorStr)}virtual void onRePosition(STOPEDGE::Directions &directions){Q_UNUSED(directions);}
};

类的详情

未完待续。。。。

Qt之MoveWindow类编写(可停靠桌面)相关推荐

  1. Hibernate_1_配置文件详解_基础案例_Hibernate工具类_API详解_持久化类编写规则

    Hibernate( ORM框架 ) Hibernate是一个数据持久化层的ORM框架. 它通过JavaBean, 数据库中的表与自身的映射关系达到表中数据的增删改查 特性 1.对JDBC访问数据库的 ...

  2. 利用输入输出流及文件类编写一个程序,可以实现在屏幕显示文本文件的功能,类似DOS命令中的type命令

    利用输入输出流及文件类编写一个程序,可以实现在屏幕显示文本文件的功能,类似DOS命令中的type命令 package p1;import java.io.BufferedReader; import ...

  3. Django的rest_framework的视图之Mixin类编写视图源码解析...

    Django的rest_framework的视图之Mixin类编写视图源码解析 Mixin类编写视图 我们这里用auther表来做演示,先为auther和autherdetail写2个url 1 2 ...

  4. JDBC--C3P0连接池的工具类编写以及功能测试

    JDBC–C3P0连接池的工具类编写以及功能测试 使用时要导入c3p0的工具包(jar包)和mysql的驱动包和对应的配置文件 首先创建一个数据库,并在其中创建一张表 CREATE DATABASE ...

  5. 后台数据库连接以及工具类编写 [木字楠博客]

    文章目录 1.项目连接数据库 1.1.引入依赖信息 1.2.编写配置文件 1.3.新增数据库配置类 1.4.代码生成器编写 2.通用枚举类编写 3.统一结果集处理器 4.其他工具类 4.1.Bean拷 ...

  6. python kivy显示图片_python基于Kivy写一个图形桌面时钟程序代码示例

    本篇文章小编给大家分享一下python基于Kivy写一个图形桌面时钟程序代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Kivy 是一个开源的 ...

  7. python时钟程序的设计总结_python基于Kivy写一个图形桌面时钟程序

    kivy 是一个开源的 python 第三方库,可以用来快速开发应用程序. 它有如下三个特点: 跨平台 kivy 编写的程序可在 linux,windows,os x,android,ios 和 ra ...

  8. Qt实现一个简单的应用程序——桌面助手

    一.软件功能及涉及知识 1.实现不同功能之间的界面切换 2.可查看日历 3.可实现计时器功能 4.可实现计算器功能 5.ui界面及按钮部件背景的设置 6.为软件设置图标 7.程序打包成软件 二.效果演 ...

  9. 在计算机桌面怎样写提示语,桌面标语-标语桌面请保持-保持桌面干净标语

    怎样在电脑桌面上 写一句标语之类的 C:\WINDOWS\Web\Wallpaper在地址栏输入这个,回车,就会看到图片,用画图打开,写上字保存,然后桌面换到写字的那张图片,就OK. 可以多写几张,这 ...

最新文章

  1. github pages_使用GitHub Pages和Lighthouse增强您的开发人员产品组合
  2. 计算机书籍-机器学习预测分析java神经网络算法与实现
  3. CVPR2018上关于目标检测(object detection)
  4. BGP基本实验拓扑图--《献给学习的人》
  5. stm32数据手册boot_STM32的ISP下载的原理是什么呢?
  6. JZOJ 2678. 树B
  7. 异步线程AsyncTask_2示例(07)
  8. python 怎么表示阶乘_python表示阶乘
  9. Python-有道翻译
  10. 小米qq音乐|小米音乐qq版
  11. springMVC注解的意思
  12. 用C语言实现base64解密(包括二进制文件)
  13. 详解ip地址和mac地址即ARP协议
  14. 华东师大在职计算机分数线,报考华东师范大学在职研究生分数线是多少呢?
  15. html form半透明,HTML——form
  16. 夜莺监控v3组件分析---Redis
  17. 完美解决CISCO PACKET TRACER 7.2需要账号登录的登录问题(转载)
  18. 1988-2020年31省基尼系数数据
  19. CISM考证的经历和心得
  20. 中国建设教育协会建筑八大员火热报名中,2021建筑八大员(机械员)模拟真题集及答案解析

热门文章

  1. win10的注册表配置-IE兼容性视图
  2. 节日营销怎么做才能得到更好的转化效果
  3. 24岁了,做个精致的电子工程师
  4. 2023最新透明UI素颜个人导航网官网永久发布页HTML源码+支持WAP响应式
  5. pd对焦速度_EOS R对焦速度有多快
  6. [渝粤教育] 西南科技大学 电子商务原理及应用 在线考试复习资料(1)
  7. 达梦数据库学习记录-包含安装、创建、体系结构、表空间用户模式对象管理备份与还原等
  8. java婚纱影楼管理系统论文_Springboot+mybatis+html婚纱摄影网站,包括后台管理系统...
  9. Python代码~爱心表白
  10. “字节跳动杯“2018中国大学生程序设计竞赛-女生专场