向QWidget中添加图片,并使图片随窗体大小缩放

怎么给QT工程ui添加图片 关于怎么给QT工程添加图片 阅读详情
AI摘要

本文介绍了在Qt中实现图片自适应QWidget窗口大小变化的方法。包括两种主要的技术途径:重写resizeEvent函数和添加事件监视器。这两种方法都能确保图片在窗口大小调整时保持良好的显示效果。

###向QWidget中添加图片有多种方式,其中一种方法如下:

// 部分核心代码片段 在Qt 5.7中编译通过
QWidget * widget = new QWidget;
widget->setAutoFillBackground(true);
QImage image;
QPalette palette;
image.load("picture_path/name.png"); // 指定图片所在位置及图片名
palette.setBrush(this->backgroundRole(),QBrush(image));
widget->setPalette(palette);

这样就可以在QWidget上添加一张图片了。但是,我们发现这样简单的处理,是有问题的。例如,代码刚运行起来,显示可能是正常的,但当我们改变窗体大小的时候,图片显示效果和想象中的开始有些差别了,例如,图片可能并没有填充,而是平铺等等。这种情况,可能是图片的分辨率刚好和窗体默认大小相当,当窗体大小更改后,二者不再相适应所引起的。要解决这个问题,我们需要在窗体大小变更后,获取窗体大小,并用它将图片的大小重新设置一次。

基本上有两种方式来实现这个效果,其一是重新实现resizeEvent(QResizeEvent * event)函数;其二是通过添加事件监视器的方式。

方式一:重新实现resizeEvent

class MyPicture : public QMainWindow
{
    Q_OBJECT
public:
    explicit MyPicture(QWidget * parent = 0) : QWidget(parent)
    {
        widget = new QWidget;
        this->setCentralWidget(widget);
        hboxlayout = new QHBoxLayout(widget);
        setAutoFillBackground(true);
    }
    void resizeEvent(QResizeEvent *event)
    {
        Q_UNUSED(event)
        QImage image;
        QPalette palette;
        image.load("图片路径及名称");
        palette.setBrush(this->backgroundRole(), QBrush(image.scaled(this->size()));
        this->setPalette(palette);
    }
    ...... // other operation
private:
    QWidget * widget;
    QHBoxLayout * hboxlayout;
};

方式二:添加事件监视器
假定自定义了一个类class_A,但没有重写resizeEvent,我们可以先写一个简单的、如下所示的类:

class MyFilterObject : public QObject
{
    Q_OBJECT
public:
    explicit MyFilterObject(QObject * parent = 0) : QObject(parent) {}
    bool eventFilter(QObject * watched, QEvent * event)
    {
        if (QEvent::Resize == event->type())
        {
            QWidget * widget = qobject_cast<QWidget *>(watched);
            QImage image;
            QPalette palette;
            image.load(":/image/test.png");
            palette.setBrush(widget->backgroundRole(), QBrush(image.scaled(widget->size(), Qt::IgnoreAspectRatio, Qt::FastTransformation)));
            widget->setAutoFillBackground(true);
            widget->setPalette(palette);
        }
    }
}

然后在自定义的类class_A的相关函数中添加如下代码:

void class_A::foo()
{
    ...
    QWidget * widget = new QWidget;
    MyFilterObject * filter = new MyFilterObject;
    QEvent * event = new QEvent(QEvent::Resize);
    widget->installEventFilter(filter);  // 安装监视器
    filter->eventFilter(widget, event);
    ...
}

使用二者中的任何一个,再次运行程序,当改变窗体大小时,发现图片大小随着窗体的改变而变化了。有一个问题,就是能明显的感觉到图片缩放是有延迟的。或许有更好的实现方式,还请知道的小伙伴不吝赐教!在此谢过先(_)

QT——如何在widget中添加图片作为背景 一、如何在widget中添加图片作为背景 1、先在工程文件夹下建立一个images文件夹用来专门放图片 2、右键当前工程,选择“添加新文件” 选择Qt --> QtResourceFile -->自定义好名字 -->下一步 3、添加 --> (此时添加文件还是灰色的,只能先添加前缀)添加前缀,我写了/images。就直接用默认的也行。 4、添加 -->添加文件(此时添加文件变黑色),选择你要加进去的图片 5、添加完图片后还要在空白处点击一下,ct... 阅读详情

相关推荐

杰理蓝牙芯片Key本质:硬件绑定的启动校验特征码

在嵌入式系统开发中,'Key'常被泛化理解为密码、密钥或授权凭证,但其技术本质需回归硬件启动安全机制。杰理(JieLi)蓝牙芯片的Key并非软件层加密密钥,而是Bootloader执行固件完整性校验时依赖的硬件绑定特征码,基于芯片UID与Flash前4KB内容生成定制哈希值,实现低成本防抄袭保护。该机制属于MCU级启动认证范畴,广泛应用于TWS耳机、蓝牙音箱等消费电子量产场景,强调ROM固化、无额外BOM成本、单次上电校验等工程特性。理解其原理对规避‘Key mismatch’错误、DIY烧录器开发及固件签

weixin_34356555的博客 389

QWidget窗口添加背景图片

QWidget窗口添加背景图片

淘气の小狼人的博客 2116

QWidget改变背景图的方法和坑

本篇文章将讲解QWidget改变背景图的方法和会遇到的问题。本篇文章就讲解到这里,这是大家在使用QT开发中可能会遇到的一个错误,这里我给大家总结了几种设置背景图的方法,大家有什么别的想法也可以和我一起交流。

m0_49476241的博客 6275

窗体设置可自由缩放的图片背景

Qt C++ 、窗体背景自由缩放

qq_45086135的博客 783

DC/DC开关电源EMC仿真红宝书

本红宝书系统性介绍开关电源EMC仿真方法,包括仿真原理、仿真思路、仿真工具以及仿真效率提升与仿测一致性的实战经验。从理论到仿真,从仿真到应用,真正帮你实现一文掌握开关电源EMC仿真!全文约14000字,适读人群:开关电源设计、电磁兼容EMC相关从业者,电磁相关专业研究生及CST仿真爱好者等。

电磁学社 2498

零基础搭建本地AI绘画环境:Stable Diffusion 3.5保姆级安装教程(含中文优化方案)

本文提供零基础搭建本地AI绘画环境的详细教程,重点介绍Stable Diffusion 3.5的安装与中文优化方案。从硬件配置检查到软件依赖安装,再到核心组件配置与中文语义增强,教程涵盖全流程操作指南,帮助用户快速掌握AI文生图模型的本地部署技巧,提升创作效率。

weixin_30752699的博客 312

QT中如何设置窗体的背景图片。

QT中如何设置窗体的背景图片。   一、设置方法有两种,如下: 1、利用style sheet给窗体设置背景     使用stylesheet设置背景图片还是有一些要注意的,如果是在mainwindow和dialog中,直接右键change style sheet在add resource中选择background-image或者border-image,选择资源文件中的图片就行了(前者是

sbisyju的专栏 7万+

数字蓝军智能体关键技术课题研究

本研究提出基于人工智能大模型技术构建智能数字蓝军智能体系统,旨在提升作战模拟推演的智能化水平。系统采用"大模型+小模型"混合架构,整合感知、决策、规划、学习等核心模块,实现动态、智能的作战方案生成。关键技术包括大模型与知识图谱融合、多智能体协同、战场态势数字化表示等。研究成果将形成可复用的垂直领域智能体框架,为军事训练提供智能化对抗平台。该系统不仅能模拟真实对手的决策行为,还能通过自我博弈持续进化,有效增强推演的真实性和对抗性。

weixin_49042442的博客 1546

QT让一个图片随窗体缩放

来源: http://blog.youkuaiyun.com/xie376450483/article/details/5902697 下面给出一个从QWidget派生的类ImageWidget,来设置其背景为一个图片,并可随着窗体改变而改变,其实从下面的代码中可以引申出其它许多方法,如果需要的话,可以从这个类再派生出其它类来使用。 头文件: ImageWidget.hpp Quote: #ifn

毅修的专栏 1280

Tera Term介绍和使用指南

Tera Term 是一个用于 Windows 操作系统的免费终端模拟器和串口通信软件。它主要用于在计算机和其他设备之间建立串口通信连接,例如通过串行线缆连接到设备如路由器、开发板或嵌入式系统。Tera Term 支持多种通信协议和功能,包括 Telnet、SSH 和串口通信。提供了一个终端窗口,模拟了常见的终端类型,如VT100。支持通过串口与设备进行通信,可用于与嵌入式系统、微控制器等设备进行连接。提供 Telnet 和 SSH 功能,可用于通过网络连接到远程主机。

weixin_49423593的博客 1万+

普通开普勒式望远镜光学设计1-初始结构设计选型与物镜像差校正

普通开普勒式望远镜光学设计1: 完成了望远镜的总体结构设计,确定其物镜与目镜的初始结构选型,使用Zemax软件完成望远镜的双胶合物镜的像差校正。

faust_cao的博客 1万+

QT 窗体背景图片缩放方式

//获取设备屏幕大小 QRect screenRect = desktopWidget->screenGeometry(); QPixmap pix(":/Resources/frame.png"); QSize picSize(deskRect.width(), deskRect.height()); //不按比例缩放图片 QPixmap scaledPixmap = p...

moudide的博客 987

深度学习论文: Towards Total Recall in Industrial Anomaly Detection

在大规模工业制造中,能够准确检测出有缺陷的零件至关重要。我们在这项工作中面临的一个特殊挑战是冷启动问题:仅使用正常的示例图像来训练模型。虽然可以针对每个类别手动设计解决方案,但我们的目标是构建能够自动适用于多个任务的系统。最佳的方法是将ImageNet模型的嵌入特征与异常检测模型结合起来。在本文中,我们在这一研究基础上进行了扩展,并提出了PatchCore,它利用了一个具有最大代表性的正常补丁特征内存库。通过这种方法,我们能够更好地解决冷启动问题,并提高系统在多任务上的性能。

mingo_敏 1874

qt 图片适应窗口_Qt图片自适应窗口控件大小

[如果要改变窗体的大小,它内部的控件一般不随它的变化而变化,内部部件怎么随窗体的大小而改变自身的大小呢?这里我们一般可以对窗口整体进行布局,我们要用到Layout最近在用Qt设计一个小程序,想让一幅图片自适应窗口大小,由于本人比较笨,一直找不到好方法。找到了很多方法但都会出一些小问题,刚刚摸索出解决办法了,在些记录。思想:1 显示图像是用QLabel2 在QWidget或其他窗口部件上显示...

weixin_42552261的博客 4216

N32G430学习笔记11- systick使用函数-延时函数

N32学习笔记11- systick使用函数-延时回调函数-延时函数

Car12 1416

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Qwidget 无法加载背景图片,或设计师显示背景图片,运行时不显示

原文链接:https://blog.youkuaiyun.com/luokehua789789/article/details/55511676 一、设置方法有两种,如下: 1、利用style sheet给窗体设置背景 使用stylesheet设置背景图片还是有一些要注意的,如果是在mainwindow和dialog中,直接右键change style sheet在add resource中选择backgro...

weixin_43841155的博客 7041

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[Qt5] 鼠标中心为基准缩放图像(halcon实现)

       事件过滤器可以接收一个对象的所有事件,当这个对象收到事件之前,事件过滤器通过eventFilter()函数先接收事件。eventFilter()函数返回true,则取消事件(事件不再向目标对象发送);返回false,则事件被继续发往目标对象。事件过滤器可以是任何从QObject继承的对象,只要实现eventFilter()这个函数。 代码如下: .h #include "qevent.h" public: void LableMouseWhee

Loewen丶的小窝 1949

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

QWidget添加背景

转自:http://blog.youkuaiyun.com/liang890319/article/details/7028660Qt Widget中给Widget加上背景图是本文要介绍的内容,主要是来了解并学习Qt Widget应用,具体内容的实现来看本文详解。关键使用widget的palette的brush.int main(int argc, char *argv[]) { QApplica

u010097237的专栏 1314

Qt小实练--实现圆角、阴影、无边框窗体,可拖拽缩放大小

用了好几天才实现标题所述功能,不练不知道,实练出真知。 先上图(由于无法动画,其实可拖拽缩放大小和移动) 实现过程: 1.建立基于QDialog的窗体,窗体上放置QWidget,起名widgetBg,在构造函数中实现 2.ui界面widgetBg的styleseete属性中设置 #widgetBg{background:url(:/bg.jpg);border-top-left-...

阿桂天山的技术栈 3320

Qt中让子窗体不继承副窗体的方法

一、设置方法有两种,如下:  1、利用style sheet给窗体设置背景       使用stylesheet设置背景图片还是有一些要注意的,如果是在mainwindow和dialog中,直接右键changestyle sheet在add resource中选择background-image或者border-image,选择资源文件中的图片就行了(前者是按像素显示图片,后者可根据窗体大小来自

shixinfeng_st的博客 5194

QT中如何设置窗体的背景图片

一、设置方法有两种,如下: 1、利用style sheet给窗体设置背景     使用stylesheet设置背景图片还是有一些要注意的,如果是在mainwindow和dialog中,直接右键change style sheet在add resource中选择background-image或者border-image,选择资源文件中的图片就行了(前者是按像素显示图片,后者可根据窗体大小来自动

柒树 1787

Qt实现无边框窗口的拖动和缩放

基于Qt的无边框窗口拖动以及缩放

威桑的博客 3049

EyesBaby功能实现之窗口拖拽与缩放功能

Winform中窗体拖拽主要由鼠标移动事件(MouseMove)、鼠标按下事件(MouseDown)和鼠标释放事件(MouseUp)完成。以下详细代码:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->  private Point mou

yizhuqing的专栏 728
上一篇: Qt 屏蔽Alt + F4 组合键
下一篇: Qt退出码255
linuxwuj
博客等级 码龄16年 25粉丝 29原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值