Qt QPushButton背景图片

news2024/11/16 5:40:23

一、问题

使用控件显示图片缩略图,当点击控件时,弹出窗口显示完整的图片

二、分析

应该用按钮控件,用信号槽连接。按钮控件是有参数icon,但是只能显示控件中,不能覆盖在整个控件上。

三、方法一:使用styleSheet

1、代码段
QString imgPathStr = ":/images/Qt.png"; // 背景图片文件路径
QString styleSheet = QString("QPushButton{border-image: url(%1);}").arg(imgPathStr);       
QPushButton *btn = new QPushButton(this);    
btn->setStyleSheet(styleSheet);
QImage img(imgPathStr);    
int w = img.width();    
int h = img.height();  // 图片宽高等比例缩放
int maxSide = 100;     // 调整图片中宽高最大者至maxSide    
if(w >= h){        
    double scale = maxSide / double(w);        
    w = maxSide;        
    h *= scale;    
}else{        
    double scale = maxSide / double(h);        
    h = maxSide;        
    w *= scale;    
}    
btn->setFixedSize(w,h);
2、效果图

在这里插入图片描述

3、 注意

控件适合自己所要大小,对图片进行长宽等比缩放计算,得到最终长宽,将控件设为固定长宽。

四、 方法二:继承QPushButton重写paintEvent

1、代码段
// 继承QPushButton重写paintEvent
class ImageButton : public QPushButton{
public:    
	ImageButton(QWidget *parent = 0):QPushButton(parent){ 
	
    }    
	void setImage(QPixmap pixMap){        
	    _pixMap = pixMap;       
	    setFixedSize(_pixMap.size());    
   	}
protected:    
	void paintEvent(QPaintEvent* event){        
	    QPainter painter(this);        
	    painter.drawPixmap(rect(), _pixMap);    
	}
private:   
	QPixmap _pixMap;
};

// 调用
QString imgPathStr = ":/images/Qt.png"; // 背景图片文件路径
QImage img(imgPathStr);
QImage scaledImg = img.scaled(100,100,Qt::KeepAspectRatio,Qt::SmoothTransformation);
ImageButton *btn = new ImageButton(this);
btn->setImage(QPixmap::fromImage(scaledImg));

五、附加

前面主要讲了图片如何在QPushButton上显示,至于点击后显示完整图片就很简单了。

1、代码段
connect(btn,&QPushButton::clicked,this,[=](){
        QDialog dlg(this);
        QHBoxLayout *hLay = new QHBoxLayout(&dlg);
        QLabel *label = new QLabel(&dlg);
        label->setPixmap(QPixmap::fromImage(img));
        hLay->addWidget(label);
        dlg.exec();
    });
2、注意

这里用了匿名函数,也可以将匿名函数函数体提取然后做些修改创建成槽函数

对你有用就点个赞👍,以后需要用到就收藏⭐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/605408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线段树算法(C++/C)

目录​​​​​​​ 一、线段树算法的概念 二、为什么需要线段树 三、线段树算法的实现 (1)建树 (2)查询 (3)修改 (4)综合代码,求区间和 (5&#xff…

从“互联网+”到“互联网医疗+”,免费互联网医院开创新格局

随着互联网的发展,各行各业都在积极探索“互联网”时代下的创新模式。其中,医疗领域也开始了自己的变革之路,从传统的医疗模式转向了“互联网医疗”的新型格局。免费互联网医院的出现,则更是为这一变革注入了新的活力。 所谓“互联…

【嵌入式系统应用开发】FPGA——基于HC-SR04超声波测距

文章目录 前言环境目标结果 1 实验原理1.1 超声波原理1.2 硬件模块时序图1.3 模块说明 2 设计文件2.1 时钟分频2.2 超声波测距2.3 超声波驱动 3 实验验证3.1 编译3.3 硬件测试 总结 前言 环境 硬件 DE2-115 HC-SR04超声波传感器软件 Quartus 18.1 目标结果 使用DE2-115开发…

【Linux驱动】认识驱动(驱动的概念、驱动分类)

目录 1、什么是驱动? 2、应用程序调用驱动基本流程 3、file_operations 结构体 4、驱动的分类 1、什么是驱动? 驱动就是一段程序,能够获取外设或者传感器数据、控制外设。驱动获取到的数据会提交给应用程序。 在 Linux 中一切皆为文件&…

【实用篇】Elasticsearch02

文章目录 分布式搜索引擎021.DSL查询文档1.1.DSL查询分类1.2.全文检索查询1.2.1.使用场景1.2.2.基本语法1.2.3.示例1.2.4.总结 1.3.精准查询1.3.1.term查询1.3.2.range查询1.3.3.总结 1.4.地理坐标查询1.4.1.矩形范围查询1.4.2.附近查询 1.5.复合查询1.5.1.相关性算分1.5.2.算分…

Linux开机rc.local不自启动执行脚本问题的排查思路及问题解决

Linux开机rc.local不自启动执行脚本问题的排查思路及问题解决 问题 Linux系统中,在rc.local里面配置的启动命令等不能能够在开机的时候进行自启动 问题解决 解决问题排查中最大的麻烦,需要进行reboot重启 查看rc-local的运行状态 systemctl status r…

clickhouse简介与实战

文章目录 1:简介1.1:CH是什么?1.2:CH优缺点1.2.1:优势1.2.2:缺点 1.3:架构设计 2:CH接口3:CH引擎1:数据库引擎3.1.1:mysql引擎 2:表引擎3.2.1&…

路径规划算法:基于模拟退火优化的路径规划算法- 附代码

路径规划算法:基于模拟退火优化的路径规划算法- 附代码 文章目录 路径规划算法:基于模拟退火优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…

基于flask的web应用开发——访问漂亮的html页面以及页面跳转

目录 0. 前言1. html基本知识2. 编写html文本3. 在Flask中设置访问html4. 实现点击跳转 0. 前言 本节学习如何在flask应用程序下让用户访问你提前制作好的html页面 操作系统:Windows10 专业版 开发环境:Pycahrm Comunity 2022.3 Python解释器版本&am…

(学习日记)2023.04.27

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

防火墙之IPSec VPN实验

防火墙IPSec VPN实验 原理概述: 指采用IPSec协议来实现远程接入的一种VPN技术,IPSec全称为Internet Protocol Security,是由Internet Engineering Task Force (IETF) 定义的安全标准框架,在公网上为两个私有网络提供安全通信通道,通过加密通道…

【数据结构】单调栈

目录 1.概述2.代码框架2.1.单调递增栈2.2.单调递减栈 3.应用3.1.应用一3.2.应用二 1.概述 (1)单调栈是一种特殊的栈,它在普通栈的基础上要求从栈顶到栈底的元素是单调的,如果栈中的元素从栈顶到栈底是单调递增的,那么…

Linux CGroup 原理

Linux CGroup 原理 1、CGroup简介 cgroups是Linux下控制一个(或一组)进程的资源限制机制,全称是control groups,可以对cpu、内存等资源做精细化控制。 开发者可以直接基于cgroups来进行进程资源控制,比如8核的机器上…

JAVA用tess4j识别复杂的验证码,自定义字库,计算题验证码,jTessBoxEditor,tess4j,验证码识别

JAVA用tess4j识别复杂的验证码,自定义字库,计算题验证码 场景JAVA用tess4j识别文本MAVEN依赖traineddata文件下载识别英文识别中文 JAVA用tess4j识别验证码常见验证码的类型识别 自定义字库,提高识别率下载jTessBoxEditor解压运行准备素材合并…

微信小程序入门笔记

常用技术:开源库 图表:wxcharts-min.js 网络通信:类似 ajax ui: WeUi JSON 配置文件 小程序中,包含唯一的全局配置文件 app.json,以及每个页面的配置文件 page.json。每单页页面相应的 JSON 文件会覆盖与 app.json相同…

门控时钟检查(clock gating check)的理解和设计应用(上)

在笔者的一篇老文Clock Gating之浅见 中,一起探讨过工具处理门控时钟的方法和门控时钟所带来的相关收益和面积代价。除此之外,门控时钟的检查(clock-gating check)在STA中也有相应的处理方式,通过这篇文章,…

4年测试经验,一问三不知,过于离谱...

公司今年要招人,面倒是面了很多测试,但没有一个合适的。一开始想要的就是中级的水准,也没指望来大牛,当然来了更好,提供的薪资在10-20k,来面试的人有很多,但平均水准真的是让人失望。 看简历时很多都写着3…

【瑞萨MCU】玩转 HMI-Board 之 MDK + RASC 点灯

此前我们已经配置好了 瑞萨 MCU MDK RASC 的开发环境,接下来进入到瑞萨 MCU 的 HelloWorld 环节,使用 MDK 点亮两个 LED 灯。 这次我们使用的是瑞萨和 RT-Thread 联合推出的 HMI-Board 开发板。 HMI-Board 开发板简介 HMI-Board 为 RT-Thread 联合瑞…

3.6 多边形游戏

博主简介:一个爱打游戏的计算机专业学生博主主页: 夏驰和徐策所属专栏:算法设计与分析 1.什么是多边形游戏? 对于多边形游戏,一种特定类型的玩法,即在给定的简单多边形上进行移动、删除顶点或边&#xff…

[图表]pyecharts-3D柱状图

[图表]pyecharts-3D柱状图 先来看代码: import randomfrom pyecharts import options as opts from pyecharts.charts import Bar3D from pyecharts.faker import Fakerdata [(i, j, random.randint(0, 12)) for i in range(6) for j in range(24)] c (Bar3D().…