QT 图片大小的自适应(重写resizeEvent方法)

在Qt中,重写resizeEvent方法通常用于在控件大小发生变化时执行自定义操作。以下是一个简单的例子,展示如何在自定义的QWidget子类中重写resizeEvent方法来按比例缩小控件的内容(比如一个内部的QPixmap):

#include <QWidget>
#include <QPixmap>
#include <QResizeEvent>
#include <QPainter>
class ScalableWidget : public QWidget {
Q_OBJECT
public:
ScalableWidget(QWidget *parent = nullptr) : QWidget(parent), m_pixmap(":/path/to/your/image.png") {
// 初始化,比如加载图片等
}
protected:
void resizeEvent(QResizeEvent *event) override {
QWidget::resizeEvent(event); // 调用基类的resizeEvent方法
// 获取新的大小
int newWidth = this->width();
int newHeight = this->height();
// 计算缩放比例,这里简单起见,假设我们按宽度缩放
float scaleFactor = static_cast<float>(newWidth) / m_pixmap.width();
// 计算新的图片大小(保持宽高比)
int scaledWidth = newWidth;
int scaledHeight = qRound(m_pixmap.height() * scaleFactor);
// 如果需要,也可以按高度缩放或取两者中较小的一个
// 绘制缩放后的图片到控件上
QPainter painter(this);
painter.setRenderHint(QPainter::SmoothPixmapTransform);
QPixmap scaledPixmap = m_pixmap.scaled(scaledWidth, scaledHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
painter.drawPixmap(0, 0, scaledPixmap);
}
private:
QPixmap m_pixmap; // 用于存储图片的QPixmap对象
};
// 在其他地方使用这个控件
ScalableWidget *widget = new ScalableWidget(parentWidget);
widget->show();

在上面的例子中,ScalableWidget类继承自QWidget,并重写了resizeEvent方法。当控件的大小改变时,它会计算一个新的缩放比例,并使用这个比例来缩放一个QPixmap对象。然后,它使用QPainter来绘制缩放后的图片到控件上。注意,这里的缩放是基于控件的新宽度来计算的,但你也可以选择基于高度或其他因素来计算缩放比例。

另外,注意路径":/path/to/your/image.png"是一个Qt资源文件的路径。你需要将你的图片添加到Qt资源文件中,并在代码中通过资源路径来引用它。如果你不是使用Qt资源文件,你可以直接加载文件系统中的图片,比如使用QPixmap::load("path/to/your/image.png")

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值