关于QLabel上显示图片扩展的问题记录

在构造函数中设置一个QLabel,用来显示图片;
源码如下:

	//创建预览窗口
    preview_ImageLabel = new QLabel();
    preview_ImageLabel->setFixedSize(750, 250);
    preview_ImageLabel->setScaledContents(true); 
    preview_ImageLabel->setAlignment(Qt::AlignCenter);
    preview_Pixmap = new QPixmap(750, 250);
    preview_Pixmap->fill(QColor(128, 128, 128));
    preview_ImageLabel->setPixmap(*preview_Pixmap);
    preview_ImageLabel->show();

然后读取图片,并在该QLabel上显示,根据读取的图片的宽高比和该QLabel空间的宽高比进行缩放,长边扩展,短边按比例缩放;

QPixmap pixmap(filePath);
    if(!pixmap.isNull())
    {
        //获取QLabel的大小
        QSize labelSize = preview_ImageLabel->size();
        float imgAspect = pixmap.width() / (float)pixmap.height();
        QSize targetSize;
        // 判断长边方向
        if (labelSize.width() / (float)labelSize.height() < imgAspect)
        {
            targetSize.setWidth(labelSize.width());
            targetSize.setHeight(labelSize.width() / imgAspect);
        }
        else
        {
            targetSize.setHeight(labelSize.height());
            targetSize.setWidth(labelSize.height() * imgAspect);
        }

        //按照宽高比缩放图片以适应QLabel
        pixmap = pixmap.scaled(targetSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
        preview_ImageLabel->setPixmap(pixmap);
    }
    else
    {
        infoWidget->setLabelText(tr("read image error !"));
        infoWidget->showSecs();
        return;
    }

代码本身没有问题,但是运行后,图片都不是按照上面希望的进行缩放;
逐步调试代码,也没有问题,targetSize已经按照要求计算正确;
迷茫中…

后面灵光一现,回到创建QLabel的地方仔细检查,突然发现一行代码:

preview_ImageLabel->setScaledContents(true); 

使用 QLabel::setScaledContents() 方法将 QLabel 的缩放模式设置为自适应模式

原来如此!!!

原来犯了这个错误。

如果在这里设置了自适应模式,那么不管后面再怎么设置图片的缩放,都不起作用,还是按照自适应模式缩放扩展到整个QLabel。

记录一下防止后期再犯相似的错误。以做警醒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值