QT实现的具有放大功能的小窗口
发布日期:2022-02-24 11:35:57 浏览次数:8 分类:技术文章

本文共 1322 字,大约阅读时间需要 4 分钟。

当小窗口在图片上方时,显示放大的局部图片,效果如下图所示:

 

源码下载地址:

注意:图片是按原图比例显示的,图片显示时已经位移或者缩放了,需要重新计算子图像位置。

1 下方图片的显示

在paintEvent中显示:

QPixmap pixmap("c:/patch-src.png");

painter.drawPixmap(0,0,pixmap);

2 获取小窗口下面的图像

为了加快速度,先从原图获取部分图像,然后再将获取到的子图像放大。

 QImage _subImage;

                getRectSubPix(_srcImage,_curInnerRect.center(),_curInnerRect.width(),_curInnerRect.height(),_subImage);

 QImage _scaledImage = _subImage.scaled(_subImage.width() * _ratio,_subImage.height() * _ratio,Qt::KeepAspectRatio,Qt::SmoothTransformation);

                QPoint _scaledCenter = QPoint(_scaledImage.width() /2 ,_scaledImage.height() / 2);

                getRectSubPix(_scaledImage,_scaledCenter,_curInnerRect.width(),_curInnerRect.height(),scaledSubImage);

3 小窗口中显示放大的图像

        QImage _grayImage(this->scaledSubImage.size(),QImage::Format_Alpha8);

        _grayImage.fill(250);

        this->scaledSubImage.setAlphaChannel(_grayImage);

        QPixmap pixmap = QPixmap::fromImage(this->scaledSubImage);

        QRect _drawRect;

        if (this->outerWindow != nullptr){

            _drawRect.setTopLeft(this->rect().topLeft());

            _drawRect.setBottomRight(this->rect().bottomRight());

        }

        if (this->innerWindow != nullptr){

            _drawRect.setTopLeft(this->mapFromParent(this->innerWindow->geometry().topLeft()));

            _drawRect.setBottomRight(this->mapFromParent(this->innerWindow->geometry().bottomRight()));

        }

        _drawRect.adjust(sr,sr,-sr,-sr);

        painter.drawPixmap(_drawRect,pixmap);

转载地址:https://blog.csdn.net/hulinhulin/article/details/121417358 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:QT实现的可移动放大缩小的大小嵌套窗体
下一篇:股票历史走势的比较及显示

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年03月23日 04时44分01秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

git知识点梳理 2019-04-26
git中tag标签的用法 2019-04-26
redis持久化, RBD(Redis Database)和AOF(Append Only File) 2019-04-26
boost::bad_function_call用法的测试程序 2019-04-26
boost::function_types::is_callable_builtin用法的测试程序 2019-04-26
微信公众号介绍_以及注册订阅号---微信公众号开发工作笔记0001 2019-04-26
Vue模板语法---vue工作笔记0003 2019-04-26
Vue计算属性之基本使用---vue工作笔记0004 2019-04-26
Vue监视---vue工作笔记0005 2019-04-26
Vue条件渲染---vue工作笔记0008 2019-04-26
Vue事件处理_vue的事件处理超级方便_功能强大---vue工作笔记0011 2019-04-26
Vue表单数据自动收集---vue工作笔记0012 2019-04-26
Vue生命周期---vue工作笔记0013 2019-04-26
ES6-ES11新特性_ECMAScript_简单介绍---JavaScript_ECMAScript工作笔记001 2019-04-26
ES6-ES11新特性_ECMAScript相关名词介绍_---JavaScript_ECMAScript工作笔记002 2019-04-26
ES6新特性_let变量声明以及声明特性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记003 2019-04-26
Sharding-Sphere,Sharding-JDBC_介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记001 2019-04-26
Sharding-Sphere,Sharding-JDBC_分库分表介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记002 2019-04-26
C++_类和对象_对象特性_构造函数的分类以及调用---C++语言工作笔记041 2019-04-26
C++_类和对象_对象特性_拷贝构造函数调用时机---C++语言工作笔记042 2019-04-26