问题:

在设置了以下代码后,图片在高分辨率下显示的挺好

QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);

但是在paintEvent里绘制图片,不管是drawImage还是drawPixmap效果都不是很好

解决方案:

比如在1080p上你要显示32x32的图片,那么在2K上准备一个64x64的图片

    QPainter painter(this);painter.setRenderHint(QPainter::HighQualityAntialiasing);QPixmap pixmap = icon().pixmap(iconSize());qreal pixelRatio = painter.device()->devicePixelRatioF();pixmap = pixmap.scaled(QSize(iconSize().width() * pixelRatio, iconSize().height() * pixelRatio), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);QPainter icon(&pixmap);icon.setCompositionMode(QPainter::CompositionMode_SourceIn);icon.fillRect(pixmap.rect(), isEnabled() ? color() : disabledColor());const qreal w = iconSize().width();const qreal h = iconSize().height();painter.drawPixmap(QRect((rect().width() - w) / 2, (rect().height() - h) / 2, w, h), pixmap);

我们加载的pixmap原大小是64x64的,  在1080p上一下代码可以很好的转换成32x32的

   pixmap = pixmap.scaled(QSize(32, 32), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);

但是在2K屏幕上,一样的代码会模糊。

所以先获取当前设备的pixelRatio

//下面两行代码是解决问题的关键

qreal pixelRatio = painter.device()->devicePixelRatioF();

转换时,用你要装换的大小乘以这个系数,如下

    pixmap = pixmap.scaled(QSize(iconSize().width() * pixelRatio, iconSize().height() * pixelRatio), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);

这时pixmap的大小不一定是32x32了,但是我们drawPixmap的时候一定把他当做32x32的rect就好了,注意,这里不要填pixmap.rect();而是你想要转换的没乘以系数的那个rect,比如pushbtn.rect();

painter.drawPixmap(0, 0, w, h), pixmap);

到此问题解决

延伸,在没设置凯文那两行代码前,可以使用下面的代码获取文本缩放比率

float MiFramelessWindow::getTextScaled()
{double rate = 0;QList<QScreen *> screens = QApplication::screens();if (screens.size() > 0) {double dpi = this->screen()->logicalDotsPerInch();rate = dpi / 96.0;if (rate < 1.1) {rate = 1.0;}else if (rate < 1.4) {rate = 1.25;}else if (rate < 1.6) {rate = 1.5;}else if (rate < 1.8) {rate = 1.75;}else {rate = 2.0;}}return rate;
}

Qt-高分辨率drawImage模糊问题相关推荐

  1. Qt——跨平台图片模糊:图片在windows上清晰mac上也清晰

    一.问题背景 最近将windows项目迁移到Mac上,发现图片模糊.本节主要介绍在mac上图片模糊原因.下一节介绍解决方案和代码.废话不多说,直入主题. 二.视网膜屏幕 视网膜屏幕是分辨率超过人眼识别 ...

  2. QtDesigner设计的界面适应高分辨率屏幕

    QtDesigner设计的界面适应高分辨率屏幕 问题描述:用QtDesigner设计好的界面.ui转换成.py后,在高分辨率屏幕下显示不全或者界面缩小显示混乱,需要手动放大页面. 解决方案:在主函数入 ...

  3. Qt使用C++封装qml自定义图形控件(QQuickPaintedItem)

    C++封装qml自定义图形控件 QtWidget.qml简介 通过继承QQuickPaintedItem封装控件 描述 公用接口定义 代码示例 效果图 QtWidget.qml简介 Qt提供了2套UI ...

  4. 车载毫米波雷达信号处理中的模糊问题

    说明 在毫米波雷达的信号处理中,测距.测速.测角是我们关注的三个核心问题,以chirp形式的信号工作的车载毫米波雷达,其最大无模糊测量距离(仅从数据处理而非能量的角度考虑)受限于接收机的中频带宽和AD ...

  5. 技术科普丨有趣的DxOMark测试(一)

    不断刷新的DxOMark手机摄像效果排名,让DxOMark作为一家第三方手机摄像效果评估公司而广受关注. 最后的排名固然最博人眼球,而分数具体代表了什么,相信你也同样关心.当然整套系统的内容非常详尽和 ...

  6. NeRF-SR: High-Quality Neural Radiance Fields using Super-Sampling论文翻译

    使用超采样的高质量神经辐射场 目录 使用超采样的高质量神经辐射场 Abstract 1. Introduction 2.Related Work 3.Background(Nerf介绍) 4.Appr ...

  7. QT drawPixmap和drawImage处理图片模糊问题

    drawPixmap和drawImage显示图片时,如果图片存在缩放时,会出现模糊现象,例如将一个100x100 的图片显示到30x30的区域,这个时候就会出现模糊.如下: 实际图片: 这个问题就是大 ...

  8. 基于Qt的图像处理技术和算法(灰度、暖色、冷色、模糊、锐化、添加相框纹理)

    这篇文章主要阐述了如何使用Qt在像素级别上对图像进行操作,并实现了一些图像效果,这些效果主要有:灰度,模糊,锐化,添加相框,金属质感,改变图像饱和度,亮度还有白平衡. 介绍 文章中,我们将讨论在Qt中 ...

  9. MySQL Workbench/SQLyog 高分辨率屏幕上界面模糊的解决方法

    MySQL Workbench/SQLyog 高分辨率屏幕上界面模糊的解决方法 参考文章: (1)MySQL Workbench/SQLyog 高分辨率屏幕上界面模糊的解决方法 (2)https:// ...

  10. Boost:使用Qt加载图像,应用简单的框模糊滤镜

    Boost:使用Qt加载图像,应用简单的框模糊滤镜 实现功能 C++实现代码 实现功能 ,Boost的compute模块使用Qt加载图像,应用简单的框模糊滤镜 C++实现代码 #include < ...

最新文章

  1. serverlet 区别_Servlet中/和/*的区别
  2. LINKs: Xamarin.Forms + Prism
  3. 【C++ grammar】数据类型转换、列表初始化
  4. Python抓取豆瓣电影详情并提取信息
  5. 强类型的JavaScript(TypeScript)–现在没有任何理由不要深入JavaScript!
  6. Aho-Corasick算法
  7. 将一个对象的空值全部设置为null
  8. “地球观光之旅”来到这座赛博朋克的城市了!
  9. 数据库实验八SQL语句的综合使用
  10. python100例详解-Python 经典算法100及解析(小结)
  11. Python干货:破解40大机器学习面试题(包含初中高级)
  12. iphone双重认证关闭不了怎么办_苹果手机双重认证怎么关闭-互盾苹果恢复精灵...
  13. 阿里云网盘资源免费分享论坛正式上线
  14. 西部陆海新通道海铁联运通达中国六省市
  15. Android 强制指定录音声卡
  16. 交叉连接(笛卡尔积)
  17. du命令参数-h/-s
  18. 如何在windows下运用dd来下修复坏块?
  19. 小米米家零冷水燃气热水器 S1 18L 评测
  20. HTML 修改滚动条样式

热门文章

  1. 分站活动丨“香港科大商学院-黑瞳科技”2020【人工智能】百万奖金国际创业大赛--上海站+成都站宣讲会...
  2. Deepin 系统下安装VMware并激活.
  3. 关于饿了么ui框架的使用之Form 表单的应用
  4. c语言社团管理系统实验报告,社团管理系统C语言实现
  5. 山西计算机网络系统安装,山西初中信息技术考试系统操作手册-20210410201505.docx-原创力文档...
  6. java--cmd乱码
  7. 蒙特卡罗方法计算圆周率C语言,用蒙特卡罗方法计算圆周率
  8. c语言圆周率天书解释,c语言天书圆周率的计算及分析.doc
  9. 基于C#窗体的酒店管理系统
  10. python 保存bin文件,python bin文件处理