最近项目中,由于需要查看图片。看了网上写的各种图片查看器。感觉都没有QQ图片查看器那种界面好看一点。并且放大了可以移动图片。为此,想着仿QQ图片查看器自己写了一个,如图:


主要实现的功能有:

  1. 鼠标滚轮可以缩小,放大图片。
  2. 界面自动大小自动调整,默认为720*540.当图片大小超过这个时候,界面调整为图片大小。
  3. 只有图片大小大于界面大小的时候,图片才可以进行移动。
  4. 重写paintEvent 纯QWidget绘制。

这里主要记录一下开发过程中遇到的问题:

  1. 提取QQ中的资源文件:
    在网上下载了一个提取QQ资源文件(PS:好评率100%)直接找到QQ的安装目录,再去寻找。
  2. A类继承了QWidget,并且在A类中已经有了布局(QVBoxLayout,QHBoxLayout)。这个时候如果写一个B类继承A类。在B类中使用布局,会无效。
    一开始的想法是:

    首先,界面框架继承QWidget类(A类)采用无边框窗体并且可以界面可拖动.当鼠标移动到相应的位置,显示关闭按钮,上一张,下一张。否则不显示。
    然后想着继承A类(保持父类的界面),然后添加一个QLabel用来显示图片。然后让图片填充满整个界面,通过操作QLabel来显示图片。但是,在“让图片填充满整个界面”的时候,采用布局,这个时候布局一直无效。因此就放弃了这种方案。直接采用重写paintEvent绘制图片显示。
  3. 当图片过大(超过指定的限时区域),可以移动图片的过程中,主要是考虑位置的移动,超过部分不显示,具体可参考:
    QT-Qpixmap实现图片鼠标缩放,鼠标拖动示例(详解)
    这里我采用的是drawPixmap 的2个函数:
    if((xPoint>0)&&(yPoint>0)){//这里清零,可以保证,放大以后拖动到其他位置后缩小,不会改变处于中下位置.int offSetX = xPoint;int offSetY = yPoint;painter.drawPixmap(offSetX,offSetY,m_pixmap);}else{painter.drawPixmap (x,y,w,h,m_pixmap,sx,sy,w,h);             //绘画图形}
  1. 重写事件的时候,如果需要将该继续向上传递处理。则需要返回相应的事件:
    如:
void QImageViewLabel::mouseMoveEvent(QMouseEvent *event)
{......QWidget::mouseMoveEvent(event);//继续传递给父亲
}

如果不需要继续传递则直接返回 return true.
如果返回值是 true,那么 Qt 会认为这个事件已经处理完毕,不会再将这个事件发送给其它对象,而是会继续处理事件队列中的下一事件。

有关于事件的机制可参考:
事件机制.

代码:
Qt 仿QQ图片查看器

Qt 仿QQ图片查看器相关推荐

  1. [分享]牛牛图片查看器[仿QQ图片查看器]及大致原理说明

    这是一个完全通过Duilib来实现的一个图片查看器,仿照QQ图片查看器的效果实现,希望大家喜欢. 先看一下使用的截图吧: 做相关说明如下: 一:使用说明 1. 通过命令行调用,传递图片路径即可打开图片 ...

  2. 窗口程序ImageView(仿QQ图片查看器)

    近期一直在学习窗口程序之类的问题,下午正好有机会和大家讨论一下. 程序运行截图: 应用方法: 1.直接把图像文件拖到图标上表现 2.通过命令行方式,示例:ImageView.exe "带全路 ...

  3. ImageView(仿QQ图片查看器)

    程序运行截图: 使用方法: 1.直接把图像文件拖到图标上显示 2.通过命令行方式,示例:ImageView.exe "带全路径的图像文件名称" 3.打开ImageView.exe, ...

  4. Qt实现简单图片查看器

    一.基本思路 1.使用lable标签来进行图片显示区域的选取 2.使用PushButton来实现上一张图片和下一张图片的查看,以及打开图片的按钮 二.相关操作原理 1.设置整体窗口大小 this-&g ...

  5. 仿微信图片查看器入场退场动画

    引子 看微信朋友圈的时候,当我们点击图片,图片会从点击的图片位置,逐渐放大,移动到正中间.退出图片查看器的时候,图片会逐渐变小,移到初始位置.对于用户来说,这是一种非常好的体验效果. 于是,自己手动撸 ...

  6. vue 实现图片查看器(仿windows图片查看器 )

    自己vue项目中用到的 一个类似于windows照片查看器的功能 不使用插件 这里的核心代码是从插件中扒下来的 因为插件有点不符合我自己的使用要求 这里记录一下 //因为我这里是vue项目 图片查看是 ...

  7. jquery图片查看插件,支持旋转、放大、缩小、拖拽、缩略图(仿qq图片查看)

    最近做了一个jquery图片查看的插件,目的是能精确查看图片的详情,插件支持图片旋转.放大.缩小.拖拽.缩略图显示,界面效果是按照window的qq查看图片功能写的,当然不尽相同. 具体功能: 多张图 ...

  8. Qt 仿QQ图片浏览器

    因和项目差异,去除了QQ分享功能和图片切换功能,若需要可自行添加: 图片资源取自网络,未免效果不佳 ,效果图如下: 源码下载链接:http://download.csdn.net/download/u ...

  9. jQuery 图片查看插件 Magnify 开发简介(仿 Windows 照片查看器)

    前言 因为一些特殊的业务需求,经过一个多月的蛰伏及思考,我开发了这款 jQuery 图片查看器插件 Magnify,它实现了 Windows 照片查看器的所有功能,比如模态窗的拖拽.调整大小.最大化, ...

最新文章

  1. redis报protocol error的真正原凶
  2. Webpack入门教程二十九
  3. poker java idea_JavaBasic学习笔记
  4. rust(22)-不可变字符串借用
  5. 行程编码(atoi函数)
  6. BZOJ1822[JSOI2010] 冷冻波
  7. 北京1954坐标转为经纬度坐标
  8. # 研究杂感 × VOSviewer(第二辑)
  9. 443端口与80端口
  10. 集丰照明|LED点光源安装方法
  11. EXCEL常规格式数字转换为日期时间格式的方法
  12. 关于hash(一):基本概念
  13. win7搭建VM10虚拟机,搭建win7旗舰版64系统
  14. 程序员用代码求救 同事“秒懂”
  15. 一个FC游戏的下载站点
  16. 华为mate40和华为p40pro的区别
  17. 电子工程师的自我修养 - 锂电池的测量电路
  18. Ribbon(1、简介)
  19. Python正则表达式清洗微博文本特殊符号(网址, @, 表情符等)
  20. MOSFET与MOSFET驱动电路原理及应用(转)

热门文章

  1. <Python>PyQt5+OpenCv+Dlib人脸合成程序
  2. java arraylist 遍历_java集合ArrayList的三种遍历方式
  3. [远控免杀]msf生成木马的信息储备
  4. 如何以数据驱动「客户全生命周期管理」,提高线索转化率及客户满意度?
  5. 清明节做了个画板App
  6. 深度 | 实现100万台iPad覆盖之后,Osmo将向大众消费品牌转型
  7. 手机端能学习html吗,【学习】如何制作手机端html模板(REM的实际应用)
  8. CoInitialize浅析二
  9. 无线蓝牙耳机排行榜_2021公认性价比最高蓝牙耳机品牌
  10. Linux之kill命令详解