关键点
QPixmap QPixmap::scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const
Qt::AspectRatioMode aspectRatioMode:
- Qt::IgnoreAspectRatio 不考虑图片比例,直接缩放到指定大小
- Qt::KeepAspectRatio 保持图片比例,缩放到指定大小内的最大矩形
- Qt::KeepAspectRatioByExpanding 保持图片比例,缩放到超出指定大小的最小矩形
QPixmap pix;
pix.load(":/25.png");
// 根据按钮的大小设置图片的大小,保持图片比例,保持图片比例,缩放到指定大小内的最大矩形
pix = pix.scaled(ui->pushButton->width(), ui->pushButton->height(), Qt::KeepAspectRatio);
// 根据图片的最大矩形大小设置按钮大小,即图片与按钮互相适应
ui->pushButton->setFixedSize(pix.size());
// 设置遮罩
ui->pushButton->setMask(pix.mask());
// 设置样式,背景图片使用border-image可自适应
// 若用background-image,可能会出现图片过大只显示一小部分(可能为透明)的情况
ui->pushButton->setStyleSheet("border-image: url(:/25.png);");
// 测试按钮区域
connect(ui->pushButton, &QPushButton::clicked, this, [=](){
qDebug() << "clicked!";
});
文章介绍了如何使用QPixmap的scaled方法根据按钮大小保持比例地缩放图片,并设置为按钮的大小及遮罩。同时,通过设置border-image样式实现按钮的背景图片自适应,避免了使用background-image可能导致的显示问题。

9268

被折叠的 条评论
为什么被折叠?



