Qt使用QLable显示图片随意拉伸大小时图片模糊问题解决 scaledcontents选项导致图片模糊

通过QtDesigner设计界面并利用布局管理器确保组件适应窗口变化。设置QLabel的scaledContents属性以拉伸图片,调整sizePolicy和minimumSize保证缩放时的最小尺寸。在代码中使用图片裁剪策略,使图片大小与标签匹配,防止模糊。
摘要由CSDN通过智能技术生成

第一步:在Qt的Designer中设计好排版(若使用纯C++写的代码,则根据以下步骤设置一下相应的属性即可,Designer内组件对应的属性在Qt提供的类中都可以找到对应的类属性与类方法)

 注意排版的一些小细节:

1、排版中多使用一些布局组件,使得画面更充盈更协调,同时运行后对窗体拉伸时,组件会随之一块变大变小。

2、对于同一个布局组件中的各个小组件,使用按比例排放选项,保证缩放时变化的同步性(纯代码编辑的Qt有提供右图中的一些可用布局类)

 

 第二步:设置QLabel标签的属性配置,将scaledcontents选中(图片拉伸选项),同样代码编写者创建标签对象后也会找到这个属性配置函数setScaledContents()      注意:下一步才是最关键的,很多给出的方法的到这就结束了,依然解决不了

 第三步:设置QLabel继承的基类QWidget中的属性sizePolicy和minimunSize,其中sizePolicy中水平和垂直策略都选择为Minimun(该选项的意思是大于等于最小值的缩放策略),同时在minimunSize中填写一个的最小尺寸,这里根据所需自己规定一个最小下限。这两个设置合起来也就是给标签规定了缩放过程中的一个最小尺寸。

 第四步:回到代码中,使用Qt给出的图片裁剪策略设置图片显示大小为标签的大小,并对图片做出裁剪处理,官方提供了三种裁剪方式

QPixmap pic;//图片
QSize size;//画框大小

//设置图片显示尺寸
size.setHeight(ui->label->height());
size.setWidth(ui->label->width());

//照片处理
pic=pic.scaled(size,Qt::IgnoreAspectRatio);
//显示
ui->label->setPixmap(pic);

 到此,当窗口大小发生变化时,图片也会随之变化,且不会出现图片模糊的效果了!!!

可以使用QImage和QPixmap来在QLabel中显示图片。你可以使用QImage的load方法来加载图片,然后使用QPixmap的fromImage方法将其转换为QPixmap,最后使用QLabel的setPixmap方法来显示图片。另外,你也可以直接使用QPixmap的load方法来加载图片显示在QLabel中。这两种方法的效果是一样的。以下是一个示例代码: ```cpp QImage img("wife.jpeg"); ui->label->setPixmap(QPixmap::fromImage(img)); // 或者 QPixmap pix; pix.load("wife.jpeg"); ui->label->setPixmap(pix); ``` 在这个示例中,我们首先使用QImage的load方法加载了一张图片,然后使用QPixmap的fromImage方法将其转换为QPixmap,并将其设置为QLabel的显示内容。另外,你也可以直接使用QPixmap的load方法来加载图片,并将其设置为QLabel的显示内容。 希望这个回答对你有帮助! #### 引用[.reference_title] - *1* [使用QLable显示图片](https://blog.csdn.net/LSC__lsc/article/details/129649752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Qt中用QLabel显示图片](https://blog.csdn.net/qq_22642239/article/details/123031925)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值