Qt之QWidget设置窗口背景图片的几种方法_qwidget设置背景图-程序员宅基地

技术标签: Qt  qt5  



Qt之QWidget设置窗口背景图片的几种方法


几种方法如下:

1.使用调色板QPalette来设置图片

QPalette pal =this->palette();
pal.setBrush(QPalette::Background,QBrush(QPixmap(":/bg.jpg")));
setPalette(pal);

首先获得Widget的调色板,然后设置设置调色板背景(setBrush),最后将调色板设置到Widget中。

2.在paintEvent事件中绘制图片

void Widget::paintEvent(QPaintEvent * ev)
{
    
	QPainter painter(this);
	painter.drawPixmap(rect(),QPixmap(":/bg.jpg"),QRect());
}

drawPixmap在Widget的整个矩形区域绘制背景图片,第三个参数为要绘制的图片区域,传入空的矩形表示整个图片区域。通过这种方式可以将图片平铺到窗口上,缺点就是要使用paintEvent事件需要新建一个类,不适合子窗口。

3.使用样式表(setStyleSheet)
   使用样式表可以很方便设置界面,而且非常高效,还能让界面和逻辑分离。设置背景图片的语句也很简单。

setStyleSheet("border-image:url(:/bg.jpg)");

这里使用border-image属性可以让图片平铺到窗口。所以样式表比较适合子窗口来使用。

4.使用间接的方式来设置背景

   比如说在窗口上覆盖一个QLabel,这个label始终与窗口一样大。然后在label中设置图片,视觉效果上和直接给窗口设置背景图片一样。

Widget::Widget(QWidget *parent) :
	QWidget(parent)
{
    
	m_lblBg = new QLabel(this);
	m_lblBg ->setPixmap(QPixmap(":/bg.jpg"));
	m_lblBg ->setScaledContents(true);
}
void Widget::resizeEvent(QResizeEvent * ev)
{
    
	m_lblBg->resize(this->size());
}

创建一个label作为Widget的子窗口,然后设置图片。通过在Widget的resizeEvent事件中设置label的大小与Widget一致。这里需要注意调用QLabel的setScaledContents(true),否则效果和第一种一样。由于QLabel可以用来显示动图因此使用这种方式可以实现窗口的动态背景图片。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangbaba_1/article/details/113648465

智能推荐

Linux笔记-程序员宅基地

文章浏览阅读243次。Linux的基本原则:1、有单一的小程序组成,结合小程序完成复杂任务;2、一切皆文件;3、尽量避免捕获用户接口;4、配置文件保存为纯文本格式。切换用户:su:switch usersu [-l] 用户名 #全切换su 用户名 #半切换exit #退出当前登陆1lo:本地回环以太网网卡:ethXifconfig:显示当前主..._blkid_dev_set_search

java猜数游戏_java实现猜数字游戏-程序员宅基地

文章浏览阅读1.2k次。本文实例为大家分享了java实现猜数字游戏的具体代码,供大家参考,具体内容如下游戏规则:通常由两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4位数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示数字正确位置也正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。如正确答案为 5234,而猜的人猜 5346,则是..._java猜数字正确

一种有效的压缩感知方法——读Levin论文笔记-程序员宅基地

文章浏览阅读71次。原文链接:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.122.2942&rep=rep1&type=pdf1 基本模型${y_i} = \left\langle {{\phi _i},z} \right\rangle + {v_i},i = 1,...,m,$其中$z$是${R^n}...

屏幕录像专家出现未注册字样-程序员宅基地

文章浏览阅读1.1k次。最近要录一个讲解软件操作的视频,上网查了用屏幕录像专家比较好,其中7.5版本的比较稳定,装好后却发现录制的视频一直有未注册字样,最后解决了,把解决方法记在这里方法一:下载注册及,运行注册机后根据机器码和自己随便起的用户名生成注册码,然后在帮助里点击注册把用户名和注册码复制进去就行了方法二:直接下载下面这个文件,把crack下的文件全部复制到安装目录里并覆盖原文件,然后打开屏幕录像专..._屏幕录像专家 v2020 显示未注册

2. Spring MVC基本操作配置及其运行流程_spring mvc基本配置及数据绑定,项目截图、运行结果截图。-程序员宅基地

文章浏览阅读220次。Spring MVC框架,与其他很多Web的MVC框架一样:请求驱动。所有设计都围绕着一个中央Servlet来展开,它负责把所有请求分发到控制器。同时提供其他web应用开发所需要的功能。不过Spring的中央处理器,DispatcherServlet,能做的比这更多。它与Spring IoC容器做到了无缝集成,这意味着,Spring提供的任何特性,在Spring MVC中都可以使用。_spring mvc基本配置及数据绑定,项目截图、运行结果截图。

【车载以太网测试从入门到精通】——数据链路层测试_车载以太网数据链路层测试-程序员宅基地

文章浏览阅读1.3k次,点赞3次,收藏6次。根据IEEE的定义,以太网数据链路层分为2个子层:媒体访问控制子层(MAC层)和逻辑链路控制层(LLC层)。分为2个子层的原因是:数据链路层实际是与物理层直接相关的,针对不同的物理层需要有与之相配合的数据链路层,例如针对以太网、令牌环需要不同的数据链路层,而这时不符合分层原则的。为此,通过划分MAC层和LLC层,尽量提高链路层的独立性,便于技术实现。_车载以太网数据链路层测试

随便推点

SmartSql模块划分-程序员宅基地

文章浏览阅读42次。整理了下,SmartSql模块划分,方便大家的学习转载于:https://www.cnblogs.com/alwaysfly/p/SmartSql-Module.html_敖騰模块用分去吗

C语言报错:unknown type name 'bool'-程序员宅基地

文章浏览阅读2.3w次,点赞15次,收藏19次。Main.c:5:1: error: unknown type name 'bool' bool zhi(int n){ ^Main.c: In function 'zhi':Main.c:8:10: error: 'false' undeclared (first use in this function) return false;报错的意思:未知的类型名:‘bool’在C..._unknown type name 'bool

为4.14低版本内核编译kernelsu绕过root检测_4.14.42内核-程序员宅基地

文章浏览阅读2.5k次。为4.14低版本内核编译kernelsu绕过root检测_4.14.42内核

js逆向-vscode与vm2无环境联调_jsvm2-程序员宅基地

文章浏览阅读986次。转载自大佬:十一姐链接: js逆向补环境-调试工具vscode与nodejs使用之无环境联调1、Node.js是一个开源、跨平台的JavaScript运行环境,可以在服务器端运行JavaScript代码。它基于Chrome的JS-V8引擎,使得JavaScript的运行速度非常快,并且提供了一系列的模块,使得开发者可以方便地进行后端开发2、nodejs下载 ,下载node-v18.16.1-x64.msi,除安装路径可以修改,其它一路next即可3、然后双击下载好的msi程序包,然后一路next,只需_jsvm2

查看H2数据库的数据_h2数据库怎么看表-程序员宅基地

文章浏览阅读4.9k次。运行程序,在浏览器中打开:http://localhost:8080/h2-console/注意:JDBC URL:jdbc:h2:mem:testdb_h2数据库怎么看表

c语言实例100_pic单片机,PIC单片机C语言编程实例-程序员宅基地

文章浏览阅读268次。PIC单片机C语言编程实例F877的外围功能模块第1章PIC16PIC16F1.1.2简单应用实例该例用于令与PORTD口相连的8个发光二极管前4个点亮,后4个熄灭。在调试程序前,应使与PORTD口相连的8位拔码开关拔向相应的位置。1例1.1.1PORTD输出#includemain(){TRISD=0X00;while(1);{PORTD=0XF0;}}/*向PORTD送数据,点亮LED(由实验..._pic c语言 实例