Qt中正确的设置窗体的背景图片的几种方式

Qt中正确的设置窗体的背景图片的几种方式


QLabel加载图片方式之一

cpp 复制代码
 QPixmap pixmap(":/images/abc.jpg"); //通过构造函数载入图片方式
 pixmap.load(":/images/ab.jpg"); //另外一种载入图片方式
 
 pixmap.scaled(ui->label1->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
 ui->label1->setScaledContents(true);
 ui->label1->setPixmap(pixmap);

Chapter1 Qt中正确的设置窗体的背景图片的几种方式

原文链接:https://blog.csdn.net/yanche521/article/details/51017601

Qt中正确的设置窗体的背景图片的方法大致有两种,下面将逐个讲解:

一、利用styleSheet设置窗体的背景图片

使用stylesheet设置窗体的背景图片的时候,可以直接按照下图的操作去进行即可,如下图所示:

但是,需要注意的是:

1.在QWidget中这种方法是不行的,如果你足够细心的话,你会发现使用同样的设置背景图片的方法,背景图片其实并没有发生真实改变,但是它的子窗体背景图片是会发生改变的。

其实我们可以通过在添加一个i额QWidget来解决这个问题,即在QtDesigner中添加一个Frame窗口,我们只需对这个新添加的Frame窗口来进行styleSheet的字符串值即可,新添加的所有子控件都添加到这个新的Frame窗口里。

2.做过Qt开发的朋友应该都知道,Qt的子窗体是会继承父窗体的属性的,这就证明了为什么父窗体的背景在子窗体中也会有,这个是对这个原因的一个非常合理的解释。那么问题来了,我们怎么才能做到子窗体不继承父窗体的背景呢?

既然上面分析到了原因,那么我们就知道如何解决了,仍然打开styleSheet代码编辑界面,我们只需要将下面的几行代码输入进去即可解决这个问题,具体代码如下所示:

cpp 复制代码
#窗体名称 {
border-image: url(:/HouseRentSystem/Resources/test.png);
}

Chapter2 Qt的主窗口背景设置

原文链接:https://blog.csdn.net/yinchengkai/article/details/124056878

首先说明一下background-image、border-image、image三种区别

background-image:简单理解就是将图片从部件的左上角开始贴图,部件的大小限制了显示图片范围;好比是我们按照部件的大小来裁剪图片

border-image:就是将贴图缩放进到部件里,部件能看到完整图片,但是此时图片会被压缩的变形

iamge:部件会按照图片的原始大小进行填充

方法一:最简单的方式是通过ui界面来设置,例如设置背景图片

在添加资源的下拉框有三种方式:

选择background-image之后会有个问题,就是窗口上的其它子部件也会贴上图,如下:

这种添加方式会让所有部件都会贴图,肯定不行;需要把background-image: url(:/image/background.png);放在#MainWindow{}里(MainWindow为主窗口的对象名),意思就是只针对主窗口设置有效,子部件无用;

背景色设置和背景图片设置也是一样的道理,如果不想窗口中的部件颜色和主窗口一样,也是需要#MainWindow来设置限定范围

设置完效果如下:

方法二 :通过代码设置窗口的palette属性来实现

1)背景图片设置

cpp 复制代码
QPixmap pixmap=QPixmap(":/image/background.png").scaled(this->size());
QPalette palette;
//设置主窗口背景图片
palette.setBrush(QPalette::Window,QBrush(pixmap));

2).背景颜色设置

cpp 复制代码
QPalette palette;
//设置主窗口背景颜色
palette.setColor(QPalette::Window,QColor(255, 150, 30));
this->setPalette(palette);

方法三:通过重写paintEvent事件,来设置背景图片和背景颜色

1)设置背景图片

cpp 复制代码
void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
 
    QPixmap pixmap(":/image/background.png");
    painter.drawPixmap(this->rect(),pixmap);
 
}

2)设置背景颜色

cpp 复制代码
void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
 
    QColor color(255, 150, 30);
    painter.setBrush(color);
    painter.drawRect(this->rect());
}

方法四:通过代码中设置样式表,其与方法一类似

1)设置主窗口背景图片

cpp 复制代码
this->setStyleSheet("QMainWindow {background-image:url(:/image/background.png)}");

2).设置主窗口背景颜色

cpp 复制代码
this->setStyleSheet("QMainWindow {background-color:rgb(255, 150, 30)}");

Chapter3 Vs+Qt 界面添加背景图的两种方式(非常实用)

原文链接

1、使用代码实现界面添加背景图

cpp 复制代码
//给窗口添加背景图
QPixmap Images("./1.png");
QPalette Palette = this->palette();
Palette.setBrush(QPalette::Background, Images);
this->setPalette(Palette);

说明:使用该方法实现界面添加背景图能够正常显示,如上图所示,但是如果需要把该工程打包成 .exe 然后移植到别的电脑运行,需要注意以下两个细节:

(1)把背景图放到该工程文件中(如下图),并在代码中使用相对路径(代码如上所示);

(2)在 .exe 文件目录再复制一份背景图(如下所示);

说明:此时移植后的 .exe 便能正常在界面上显示背景图;

2、使用样式表实现界面添加背景图

Chapter4 如何在Qt Desginer中设置背景图片,且不覆盖其它控件

原文链接

Chapter5 基于QT的电力软件界面

原文链接:https://blog.csdn.net/2301_76989824/article/details/129490264

基于QT的电力软件界面

包含软件工程源码,软件配置环境:VS2012+Qt4.6,windows操作系统

软件具体包含功能:

[1]界面首页显示,系统下拉导航栏显示、主功能tab页显示

[2]下拉导航栏右边伸缩显示,自定义列表控件;

[3]自定义tab页、表格页功能;

[4] 包含软件打包程序,一键运行;

[5]自定义控件,QSS界面美化,扁平化界面风格显示;

[6]统一界面风格和背景图片。

相关推荐
yuanpan2 分钟前
MongoDB中的横向扩容数据分片
数据库·mongodb
草明3 分钟前
Mongodb 慢查询日志分析 - 1
数据库·python·mongodb
yuanpan4 分钟前
MongoDB的事务机制
数据库·mongodb
等一场春雨16 分钟前
Java设计模式 八 适配器模式 (Adapter Pattern)
java·设计模式·适配器模式
一弓虽38 分钟前
java基础学习——jdbc基础知识详细介绍
java·学习·jdbc·连接池
王磊鑫38 分钟前
Java入门笔记(1)
java·开发语言·笔记
SelectDB1 小时前
Apache Doris 2.1.8 版本正式发布
大数据·数据库·数据分析
硬件人某某某1 小时前
Java基于SSM框架的社区团购系统小程序设计与实现(附源码,文档,部署)
java·开发语言·社区团购小程序·团购小程序·java社区团购小程序
程序员徐师兄1 小时前
Java 基于 SpringBoot 的校园外卖点餐平台微信小程序(附源码,部署,文档)
java·spring boot·微信小程序·校园外卖点餐·外卖点餐小程序·校园外卖点餐小程序
chengpei1471 小时前
chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确
java·前端·chrome·spring boot·json