一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

  如何在改变窗口组件的情况下改变窗口背景图片的大小,我们通常会使用Qt自带的scaled()函数;QImage、QPixmap等绘图设备类都提供scaled()函数。

  scaled()是一个重载函数,按照指定的宽和高,根据纵横比模式和转换模式从原有图像返回一个经过比例转换的图像,如果宽高为0,返回一个空图像
所以,获取控件的改变后的宽高,就能设定图像转换的宽高转换比例,用scaled()的返回重新进行绘图即可自适应窗口,以下是个例子:

复制代码
 1 void Widget::paintEvent(QPaintEvent *)  
 2 {  
 3   
 4     QImage img((unsigned char*)im.data,im.cols,  
 5                    im.rows,QImage::Format_RGB888);  
 6     QPainter painter(this);  
 7     if(0==flag)  
 8         painter.drawImage(0,0,nImg);  
 9     /* 
10         一定要加标记位判断,控件在绘制之前的size为NULL, 
11         所以scaled()返回值也为NULL,会提示nImg是空的 
12     */  
13     else if(1==flag)  
14     {  
15         nImg=img.scaled(width(),height());  
16         painter.drawImage(0,0,nImg);  
17     }  
18 }
复制代码

备注:如果图片缩放比例较大,最好原始资源图片的分辨率高点,否则会在放大后,出现图片模糊。

posted on   一杯清酒邀明月  阅读(3148)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示