• 2394阅读
  • 3回复

Qt编写自定义控件67-通用无边框 [复制链接]

上一主题 下一主题
离线liudianwu
 

只看楼主 正序阅读 楼主  发表于: 2019-10-12
一、前言
在之前的一篇文章中写过一个通用的移动控件,作用就是用来传入任意的widget控件,可以在父类容器中自由移动。本篇文章要写的是一个通用的无边框类,确切的说这不叫控件应该叫组件才对,控件是要看得见的东西,有绘制需求的,而这个需要依附在控件上。在我们平时做的项目中,为了U界面的美观,很多会采用自定义无边框窗体来处理,自己美化标题栏等,都会面临一个相同的问题,就是设置好自定义无边框窗体以后,要自己处理窗体的移动和拉伸,如果有多个无边框窗体,很多人会想到每个地方都写重复的代码来实现移动或者拉伸,何不封装一个类来完成这个功能呢,直接传入窗体即可。在QDialog窗体中可以通过设置一个属性sizeGripEnabled来实现右下角的拉伸,这个还不足以满足所有的需求,很多时候我们还需要在四个角和上下左右都能拉伸大小,这个就需要重写了,安装事件过滤器,识别到鼠标移动到某个区域,鼠标形状自动变化,然后识别是否已经按下,按下的话做对应的处理,对应的处理核心就是重新设置窗体的XY轴坐标和大小。

开源地址:[https://gitee.com/feiyangqingyun/QWidgetDemo](https://gitee.com/feiyangqingyun/QWidgetDemo)  [https://github.com/feiyangqingyun/QWidgetDemo](https://github.com/feiyangqingyun/QWidgetDemo)

二、实现的功能
* 1:可以指定需要无边框的widget
* 2:边框四周八个方位都可以自由拉伸
* 3:可设置对应位置的边距,以便识别更大区域
* 4:可设置是否允许拖动
* 5:可设置是否允许拉伸

三、效果图

欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线smileli

只看该作者 3楼 发表于: 2019-10-12
给大佬1024个攒!
在线boylebao

只看该作者 2楼 发表于: 2019-10-12
为Qt打造具有强大生产力的软件。

只看该作者 1楼 发表于: 2019-10-12
提供代码的反手一个赞,,不提供代码的就是批评这个点赞
快速回复
限100 字节
 
上一个 下一个