当前位置: 首页 > news >正文

qt自适应图片

在 Qt 中,通过重写 paintEvent 方法来添加自适应背景图片的过程如下:

  1. 创建一个自定义的 QWidget 子类。
  2. 重写 paintEvent 方法,在该方法中使用 QPainter 绘制背景图片。
  3. 使用 QPixmap 加载图片,并调整图片的大小以适应窗口的大小。

以下是一个示例代码,展示如何实现这个功能:

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QPixmap>class CustomWidget : public QWidget
{
public:CustomWidget(QWidget *parent = nullptr) : QWidget(parent) {}protected:void paintEvent(QPaintEvent *event) override{// 调用基类的paintEventQWidget::paintEvent(event);QPainter painter(this);// 加载背景图片QPixmap background(":/images/background.jpg"); // 确保图片路径正确// 调整图片大小以适应窗口大小QPixmap scaledBackground = background.scaled(size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);// 绘制背景图片painter.drawPixmap(0, 0, scaledBackground);}
};int main(int argc, char *argv[])
{QApplication app(argc, argv);CustomWidget widget;widget.resize(800, 600); // 设置窗口大小widget.show();return app.exec();
}

代码说明

  1. 创建自定义 QWidget 子类
    创建一个 CustomWidget 类,继承自 QWidget

  2. 重写 paintEvent 方法
    CustomWidget 中重写 paintEvent 方法。在这个方法中使用 QPainter 来绘制背景图片。

  3. 加载并调整图片大小
    使用 QPixmap 加载图片,并通过 scaled 方法将图片调整为窗口的大小。scaled 方法的参数分别是目标大小、缩放模式(此处为 Qt::IgnoreAspectRatio,即不保持图片原始比例),以及平滑转换方式(此处为 Qt::SmoothTransformation)。

  4. 绘制背景图片
    使用 QPainter::drawPixmap 方法将调整大小后的图片绘制在窗口的左上角。

  5. 主函数
    main 函数中创建 QApplication 对象和 CustomWidget 对象,设置窗口大小并显示窗口。

注意事项

  • 确保背景图片的路径正确,可以使用资源文件(qrc)来管理图片。
  • 如果图片路径不正确或者图片文件不存在,程序将无法正确加载和显示背景图片。
  • QPainter 对象的生命周期应该在 paintEvent 方法内管理,不要在其他地方长期持有 QPainter 对象。

相关文章:

  • [Vue3:axios]:实现登录跳转页面展示列表(查看教师所承担课程的学生选课情况)
  • 基于springboot实现交通管理在线服务系统项目【项目源码+论文说明】计算机毕业设计
  • [一] 解释自己思维判断与行为 - 《情报分析心理学》读后感
  • Java中如何调用mysql中函数
  • LVGL移植和图片显示
  • 聚焦新版综合编程能力面试考查汇总
  • Vue18-列表渲染
  • 零基础直接上手java跨平台桌面程序,使用javafx(四)用Apache POI读取excel文件。
  • 【Jenkins+K8s】持续集成与交付 (二十):K8s集群通过Deployment方式部署安装Jenkins
  • 三高系统的架构设计方案:高并发、高可用、高性能
  • WebSphere面试题精选和参考答案(3万字长文)
  • 1789. 员工的直属部门
  • 「前端+鸿蒙」鸿蒙应用开发-TS接口-语法多态
  • 生成式人工智能重置:从初期热潮到战略扩展
  • STM32 ST-LINK Utility的下载安装使用说明如下:
  • 230. Kth Smallest Element in a BST
  • Apache Zeppelin在Apache Trafodion上的可视化
  • canvas 五子棋游戏
  • Flannel解读
  • Laravel 中的一个后期静态绑定
  • linux安装openssl、swoole等扩展的具体步骤
  • spring-boot List转Page
  • Spring声明式事务管理之一:五大属性分析
  • 阿里研究院入选中国企业智库系统影响力榜
  • 将 Measurements 和 Units 应用到物理学
  • 区块链共识机制优缺点对比都是什么
  • 我这样减少了26.5M Java内存!
  • 项目实战-Api的解决方案
  • 怎样选择前端框架
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 选择阿里云数据库HBase版十大理由
  • 整理一些计算机基础知识!
  • ​iOS实时查看App运行日志
  • ​linux启动进程的方式
  • ​数据链路层——流量控制可靠传输机制 ​
  • #QT(智能家居界面-界面切换)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (1)bark-ml
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (k8s)kubernetes集群基于Containerd部署
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (十三)Flask之特殊装饰器详解
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (原)本想说脏话,奈何已放下
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转载)Linux 多线程条件变量同步
  • .NET Core 中的路径问题
  • .net mvc 获取url中controller和action
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 解决重复提交问题
  • .net(C#)中String.Format如何使用
  • .net6+aspose.words导出word并转pdf
  • .Net转前端开发-启航篇,如何定制博客园主题