Qt之MoveWindow类编写(可停靠桌面)
前言:
因为项目需求,现在要做一个窗口停靠功能,故集成于MoveWindow类中
功能需求:
- 自定义标签,自定义窗口按钮(关闭,缩小)
- 窗口停靠
代码:
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类编写(可停靠桌面)相关推荐
- Hibernate_1_配置文件详解_基础案例_Hibernate工具类_API详解_持久化类编写规则
Hibernate( ORM框架 ) Hibernate是一个数据持久化层的ORM框架. 它通过JavaBean, 数据库中的表与自身的映射关系达到表中数据的增删改查 特性 1.对JDBC访问数据库的 ...
- 利用输入输出流及文件类编写一个程序,可以实现在屏幕显示文本文件的功能,类似DOS命令中的type命令
利用输入输出流及文件类编写一个程序,可以实现在屏幕显示文本文件的功能,类似DOS命令中的type命令 package p1;import java.io.BufferedReader; import ...
- Django的rest_framework的视图之Mixin类编写视图源码解析...
Django的rest_framework的视图之Mixin类编写视图源码解析 Mixin类编写视图 我们这里用auther表来做演示,先为auther和autherdetail写2个url 1 2 ...
- JDBC--C3P0连接池的工具类编写以及功能测试
JDBC–C3P0连接池的工具类编写以及功能测试 使用时要导入c3p0的工具包(jar包)和mysql的驱动包和对应的配置文件 首先创建一个数据库,并在其中创建一张表 CREATE DATABASE ...
- 后台数据库连接以及工具类编写 [木字楠博客]
文章目录 1.项目连接数据库 1.1.引入依赖信息 1.2.编写配置文件 1.3.新增数据库配置类 1.4.代码生成器编写 2.通用枚举类编写 3.统一结果集处理器 4.其他工具类 4.1.Bean拷 ...
- python kivy显示图片_python基于Kivy写一个图形桌面时钟程序代码示例
本篇文章小编给大家分享一下python基于Kivy写一个图形桌面时钟程序代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Kivy 是一个开源的 ...
- python时钟程序的设计总结_python基于Kivy写一个图形桌面时钟程序
kivy 是一个开源的 python 第三方库,可以用来快速开发应用程序. 它有如下三个特点: 跨平台 kivy 编写的程序可在 linux,windows,os x,android,ios 和 ra ...
- Qt实现一个简单的应用程序——桌面助手
一.软件功能及涉及知识 1.实现不同功能之间的界面切换 2.可查看日历 3.可实现计时器功能 4.可实现计算器功能 5.ui界面及按钮部件背景的设置 6.为软件设置图标 7.程序打包成软件 二.效果演 ...
- 在计算机桌面怎样写提示语,桌面标语-标语桌面请保持-保持桌面干净标语
怎样在电脑桌面上 写一句标语之类的 C:\WINDOWS\Web\Wallpaper在地址栏输入这个,回车,就会看到图片,用画图打开,写上字保存,然后桌面换到写字的那张图片,就OK. 可以多写几张,这 ...
最新文章
- github pages_使用GitHub Pages和Lighthouse增强您的开发人员产品组合
- 计算机书籍-机器学习预测分析java神经网络算法与实现
- CVPR2018上关于目标检测(object detection)
- BGP基本实验拓扑图--《献给学习的人》
- stm32数据手册boot_STM32的ISP下载的原理是什么呢?
- JZOJ 2678. 树B
- 异步线程AsyncTask_2示例(07)
- python 怎么表示阶乘_python表示阶乘
- Python-有道翻译
- 小米qq音乐|小米音乐qq版
- springMVC注解的意思
- 用C语言实现base64解密(包括二进制文件)
- 详解ip地址和mac地址即ARP协议
- 华东师大在职计算机分数线,报考华东师范大学在职研究生分数线是多少呢?
- html form半透明,HTML——form
- 夜莺监控v3组件分析---Redis
- 完美解决CISCO PACKET TRACER 7.2需要账号登录的登录问题(转载)
- 1988-2020年31省基尼系数数据
- CISM考证的经历和心得
- 中国建设教育协会建筑八大员火热报名中,2021建筑八大员(机械员)模拟真题集及答案解析
热门文章
- win10的注册表配置-IE兼容性视图
- 节日营销怎么做才能得到更好的转化效果
- 24岁了,做个精致的电子工程师
- 2023最新透明UI素颜个人导航网官网永久发布页HTML源码+支持WAP响应式
- pd对焦速度_EOS R对焦速度有多快
- [渝粤教育] 西南科技大学 电子商务原理及应用 在线考试复习资料(1)
- 达梦数据库学习记录-包含安装、创建、体系结构、表空间用户模式对象管理备份与还原等
- java婚纱影楼管理系统论文_Springboot+mybatis+html婚纱摄影网站,包括后台管理系统...
- Python代码~爱心表白
- “字节跳动杯“2018中国大学生程序设计竞赛-女生专场