Qt 绘制图片自适应窗口大小(QImage,QPixmap,QLabel) | 您所在的位置:网站首页 › 如何确定widget的尺寸 › Qt 绘制图片自适应窗口大小(QImage,QPixmap,QLabel) |
工作过程中需要用某个控件展示本地图片文件,但又不想图片比例发生变化,导致文件查看时有变形感。因为只是极小一部分内容就直接使用QLable控件来完成此功能。 下面简单介绍一下我个人使用Label展示图片常用方法,若有错误欢迎指正 填充整个控件 ui->imgLable->setPixmap(QPixmap(imgpath));//label 加载图片imgpath ui->imgLable->setScaledContents(true); //根据label大小缩放图片 效果:图片填充整个label,且可以随label变化而变化,缺点则会改变图片比例导致有些图片显示不正常 // 根据label宽度等比例缩放图片 ui->imgLable->setPixmap(pix.scaledToWidth(ui->imgLable->width())); // 根据label高度等比例缩放图片 ui->imgLable->setPixmap(pix.scaledToHeight(ui->imgLable->height())); 效果:图片根据指定高度或宽度进行等比例变换,缺点是当label控件为preferred将会导致窗口忽大忽小,友好度较差; 等比例填充 QPixmap pix(imgpath); int scalHeight = ui->imgLable->height(); int scalWidth = pix.scaledToHeight(scalHeight).width();//根据label高度计算得到控件目标宽度 if(ui->imgLable->width() < scalWidth) {//再次调整,确保图片能够在控件中完整显示 scalWidth = ui->imgLable->width(); scalHeight = pix.scaledToWidth(scalWidth).height(); } ui->imgLable->setPixmap(pix.scaled(scalWidth,scalHeight,Qt::KeepAspectRatio));效果:此时图片比例不发生变化,且不会出现忽大忽小的现象。缺点是当主窗口改变大小时label图片大小不随之变化,需要主动做刷新操作; 以上操作还有更简单办法: pix = pix.scaled(ui->imgLable->width(),ui->imgLable->height(),Qt::KeepAspectRatio); ui->imgLable->setPixmap(pix); 注意scale参数AspectRatioMode,此参数用于控制缩放时是否保留原有比例关系: enum AspectRatioMode { IgnoreAspectRatio, KeepAspectRatio, KeepAspectRatioByExpanding }; 查看Qt帮助文档: |
CopyRight 2018-2019 实验室设备网 版权所有 |