# AdjustablePixmapLabel **Repository Path**: justdoit-mqr/AdjustablePixmapLabel ## Basic Information - **Project Name**: AdjustablePixmapLabel - **Description**: 这是一个基于QLabel开发的小组件,专用于pixmap显示,可通过鼠标和滚轮自由调节图片的位置和大小 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-02 - **Last Updated**: 2022-03-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AdjustablePixmapLabel 这是一个基于QLabel开发的小组件,专用于pixmap显示,可通过鼠标和滚轮自由调节图片的位置和大小。 注:代码基于Qt5.12版本编写,用到了一些c++11的特性,较低版本请自行修改相关位置。 ## 功能概述 该类继承自QLabel,专门用于使用QLabel设置pixmap显示图片的场景,可通过鼠标以及滚轮自由调整图片的位置与大小,并实现了以鼠标光标为中心的放大与缩小。另外因为项目需要,还增加了在鼠标光标移动过程中实时获取图像像素点的灰度值的功能,该功能相对会影响性能,如不需要可在构造函数中关闭鼠标跟踪。 **移动与放缩实现原理:** 图片位置移动与放缩的实现基于坐标系的平移与放缩,默认以部件中心点作为坐标系原点,通过移动位置增量在此基础上改变原点进而改变图片的位置。初期还使用过另一个不涉及坐标系变化的方案,即保持部件本身的坐标系,放缩pixmap本身,然后根据部件尺寸和放缩后的图片尺寸计算出绘制矩形,将其绘制到部件上。该方案有一个极大的缺陷就是放大pixmap本身意味着占用的内存也在扩增,容易出现超出QImage的最大限制的问题,所以最终弃用。 ## 代码接口 AdjustablePixmapLabel类主要通过重写QLabel的鼠标与滚轮事件处理函数,以及绘图与重设部件大小的事件处理函数,实现对图片的自由调节。各种处理均以protect或者private的形式封装在类内部,通常无需修改,只需要调用对外接口setPixmap()即可。如下所示,详情可参考代码头文件。 ``` //对外接口,用来设置图片,并自动计算图片所在矩形 void setPixmap(const QPixmap &pixmap,bool is_reset=true); ``` ## 小结 关于图片的移动与放缩,Qt已经通过图形视图框架(QGraphicsView)提供了现成的解决方案,此处使用QLabel相当于重复造个轮子,也算是一个简单的替代方案。 ## 参考资料 1. [QLabel实现图像以鼠标为中心进行缩放和拖动](https://blog.csdn.net/weixin_43935474/article/details/118254075) 2. [在QLabel中缩放移动图片](https://blog.csdn.net/Viciower/article/details/97648437) ## 作者联系方式 **邮箱:justdoit_mqr@163.com** **新浪微博:@为-何-而来**