码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 07 Qt自绘组件:图片预览小组件ImageViewer


    系列文章目录

    01 Qt自定义风格控件的基本原则-CSDN博客

    02 从QLabel聊起:自定义控件扩展-图片控件-CSDN博客

    03 从QLabel聊起:自定义控件扩展-文本控件-CSDN博客

    04 自定义Button组件:令人抓狂的QToolButton文本图标居中问题-CSDN博客

    05 扩展组件:自定义CheckBox组件-CSDN博客

    06 Qt自绘组件:Switch动画开关组件-CSDN博客

    文章目录

    目录

    系列文章目录

    文章目录

    前言

    一、示意效果

    二、实现思路

    1.概述

    2.功能接口举例

     3.部分接口说明

    3.1.每次放缩后,需要调整scrollBar的值(包括:水平、垂直)

    总结

    前言

    在Qt-Gui中,图片预览组件是一个常见的功能,用于显示图像文件的预览,提供用户友好的图像查看体验。通过图片预览组件,用户可以在应用程序中快速浏览和查看图片,同时可以进行放大、缩小、旋转等操作,以便更好地查看图片细节。

    在本文中,我们将介绍如何使用Qt常规的组件Control来实现一个简单的图片预览组件。我们将展示如何加载显示预览图像、实现放大缩小功能以及旋转图片等操作。通过这个示例,读者将了解如何在Qt应用程序中集成图片预览功能,并为用户提供更加丰富的图像查看体验。

    通过阅读本文,读者将学习如何利用Qt强大的功能和易用的API来开发图片预览组件,为应用程序添加更多交互性和功能性。希望本文能够帮助读者更好地理解Qt业务开发中,常规组件的应用以及功能扩展,在实际项目中开发图片预览功能提供一些启发与思路。

    其实,在Qt的官方Demo(imageviewer)中对该功能组件做了基本的阐述,这里我再次结合自己的开发经验做一下简单整理、扩展并记录如下!


    一、示意效果

    二、实现思路

    1.概述

     使用 `QScrollArea` 实现图片预览组件的实现思路如下:

    1. 创建一个 `QScrollArea` 对象,用于显示图片预览。将其作为父级容器,可以容纳图片预览组件,并提供滚动功能,以便在图片尺寸大于显示区域时进行滚动查看。

    2. 在 `QScrollArea` 中添加一个 `Image组件` 对象,用于显示图片。

    3. 加载图片文件并设置给 `Image` 控件。

    4. 实现放大缩小功能。通过调整 `Image组件` 的大小以及缩放 `QPixmap` 对象来实现图片的放大缩小效果。

    5.可以监听鼠标滚轮事件或添加放大缩小按钮来控制图片的显示大小。

    6. 实现旋转功能。可以通过旋转 `QPixmap` 对象或者旋转 `Image` 控件来实现图片的旋转效果。可以添加旋转按钮或者快捷键来控制图片的旋转角度。

    6. 添加适当的布局管理器。使用布局管理器来管理 `QScrollArea` 和 `Image` 控件的位置和大小,以确保它们能够正确显示在预览组件中。

    通过以上实现思路,我们可以利用 `QScrollArea` 和其他Qt类来快速实现一个功能完善的图片预览组件,为用户提供方便的图片浏览和操作功能。

    2.功能接口举例

    1. class QUiImage;
    2. class QUIEXTPLUGIN_EXPORT QUiImageViewer : public QWidget
    3. {
    4. Q_OBJECT
    5. public:
    6. QUiImageViewer(QWidget *parent);
    7. ~QUiImageViewer();
    8. //设置图片资源
    9. void setImage(const QString& src);
    10. //设置放缩倍数
    11. void setZoomMultiple(int zoom);
    12. int zoomMultiple()const { return m_iZoomMultiple; }
    13. //放缩步长
    14. void setZoomStep(int step);
    15. int zoomStep()const { return m_iZoomStep; }
    16. //放大
    17. void zoomIn();
    18. //缩小
    19. void zoomOut();
    20. protected:
    21. void drawUI();
    22. void initImageSizeInfo();
    23. void adjustScrollBar(QScrollBar *scrollBar, double factor);
    24. void resizeEvent(QResizeEvent *event) override;
    25. bool eventFilter(QObject *watched, QEvent *pEvt) override;
    26. private:
    27. QPointer m_pScrollView;
    28. QPointer m_pImageFrame;
    29. //图片组件
    30. QPointer m_pImage;
    31. //图片原始尺寸信息
    32. QRect m_imgInitRc;
    33. //放缩倍数
    34. int m_iZoomMultiple;
    35. //放缩步长
    36. int m_iZoomStep;
    37. //最大放缩倍数
    38. int m_iMaxZoom;
    39. //最小放缩步数
    40. int m_iMinZoom;
    41. //图片旋转角度
    42. int m_iRotateAngle;
    43. };

     3.关键接口说明

    3.1.每次放缩后,需要调整scrollBar的值(包括:水平、垂直)

    因为,我们每次放缩图片都应该以图标中心为基准,如果单纯放缩图片不调整滚动条的话, 你会发现图片的中心会越来越偏移!

    1. void QUiImageViewer::adjustScrollBar(QScrollBar *scrollBar, double factor)
    2. {
    3. scrollBar->setValue(int(factor * scrollBar->value()
    4. + ((factor - 1) * scrollBar->pageStep() / 2)));
    5. }

     


    总结

    以上就是今天要分享的:Qt如何实现图片预览小组件的内容!

    既聊思路,也说代码!我们下次继续分享自定义风格扩展组件!

    PS:本专栏所有篇幅涉及的UI扩展组件类,后面会封装成插件动态库,感兴趣的同学可以留言哦

  • 相关阅读:
    为什么Netty NioEventLoopGroup的线程数默认为CPU核心数_2?
    vue:项目开发:在请求拦截器中处理loading加载 && 请求头(headers)的检验配置 && 接口文档出现的特殊符号处理的方式
    python毕业设计项目源码选题(6)校园新生自助报到系统毕业设计毕设作品开题报告开题答辩PPT
    网络安全-渗透测试
    浏览器输入URL后到服务器返回数据大体过程
    87:第七章:开发前台首页、作家个人展示页、粉丝等功能:8:【显示粉丝数、关注数】;
    【Python机器学习项目】项目一:心脏病二分类问题
    报错:Unknown at rule @apply
    【wps】记录
    dpdk tap设备不能转发大于1500报文问题分析
  • 原文地址:https://blog.csdn.net/HYNzhl/article/details/136333074
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号