关于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);}//按照宽高比缩放图片以适应QLabelpixmap = 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。
记录一下防止后期再犯相似的错误。以做警醒。