Qt 设置窗口背景图片的几种方法实例

2023-05-16

1.在paintEvent事件中绘制图片

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

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


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

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

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


3. 使用样式表(setStyleSheet)

使用样式表可以很方便设置界面,而且非常高效,还能让界面和逻辑分离。真的是Qt里非常好用的一个东西,设置背景图片的语句也很简单.

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

一句话就搞定了,这里使用border-image属性可以让图片平铺到窗口,效果与第二点一样。不过在本例中由于Widget是顶层窗口,所以直接设置样式表也不会显示。所以样式表比较适合子窗口来使用。

注意这三者的使用:

在这里插入图片描述


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可以用来显示动图因此使用这种方式可以实现窗口的动态背景图片。

如果你用的是界面类的话,你还可以通过Widget等画布,放大到和窗口一样大小,然后再画布上加载图片,从而达到设置背景图的效果。

/***************************

主界面设置背景一般有设置背景图片和背景颜色的需求,其实二者之间设置方法类似
目录

主界面设置背景一般有设置背景图片和背景颜色的需求,其实二者之间设置方法类似

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

 

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

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

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

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

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

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

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

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


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

 

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

 

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

 设置前      

        设置后

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

 

 设置完效果如下:

 

方法二 :通过代码设置窗口的palette属性来实现
1)背景图片设置

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

QPalette palette;
//设置主窗口背景颜色
palette.setColor(QPalette::Window,QColor(255, 150, 30));
this->setPalette(palette);
方法三:通过重写paintEvent事件,来设置背景图片和背景颜色
1)设置背景图片

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
 
    QPixmap pixmap(":/image/background.png");
    painter.drawPixmap(this->rect(),pixmap);
 
}
2)设置背景颜色

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
 
    QColor color(255, 150, 30);
    painter.setBrush(color);
    painter.drawRect(this->rect());
}
方法四:通过代码中设置样式表,其与方法一类似
1)设置主窗口背景图片

this->setStyleSheet("QMainWindow {background-image:url(:/image/background.png)}");
2).设置主窗口背景颜色

this->setStyleSheet("QMainWindow {background-color:rgb(255, 150, 30)}");
 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 设置窗口背景图片的几种方法实例 的相关文章

  • C语言-动态内存管理

    C语言中 xff0c 我们在使用数组的时候 xff0c 经常有这样的一个问题 xff1a 数组在申明的时候 xff0c 必须指定数组的长度 xff0c 它所需要的内存在编译时分配 有的时候 xff0c 我们开辟的空间太小 xff0c 无法满
  • tightvncserver中文版,3步实现tightvncserver中文版下载

    tightvnc是一个免费的软件控制软件开发包 xff0c 您可以通过鼠标 键盘操作远程机器 tightvnc对个人和商业应用都免费 xff0c 开放所有源代码 Ttightvnc可以运行在Windows Unix Mac系统上 xff0c
  • c语言-指针的本质和使用

    指针的本质和使用 一 地址概念 我们首先来看看地址 是个什么概念 每一个变量都有一个内存位置 xff0c 每一个内存位置都定义了可使用 amp 运算符访问的地址 xff0c 它表示了在内存中的一个地址 画图简单说明 xff1a 二 什么是指
  • C++类与对象概念详解

    一 简介 1 类用于指定对象的形式 xff0c 它包含了数据表示法和用于处理数据的方法 类中的数据和方法称为类的成员 函数在一个类中被称为类的成员 2 类提供了对象的蓝图 xff0c 所以基本上 xff0c 对象是根据类来创建的 声明类的对
  • C++类对象的创建与释放过程详解

    类的定义与实例化 类对象的创建方法 类对象的创建过程 类对象的释放过程 析构函数 缺省析构函数 类的定义与实例化 类对象的创建方法 1 在栈上创建 类名 对象 无参创建方法 类名 对象 实参 有参创建方法 2 在堆上创建 类名 对象指针 6
  • c++中类创建对象的两种方式

    class A xff1b 1 A a xff1b 2 A a 61 new A 第一种方式对象数据存在栈中 xff0c 是局部变量 xff1b 第二种方式方式申请了动态内存 xff0c 即对象数据在堆区
  • C#里面SQLite读取数据的操作

    挂载表格时候用 public static DataSet Query string SQLString using SQLiteConnection connection 61 new SQLiteConnection connectio
  • C#-Hook钩子实例

    一 写在最前 本文的内容只想以最通俗的语言说明钩子的使用方法 xff0c 具体到钩子的详细介绍可以参照下面的网址 xff1a http www microsoft com china community program originalar
  • C#-invoke与sendmessage,findWindow的阻塞实验

    虽然模态对话框阻塞了顶层窗体 xff0c 但是仍然可以通过findwindow查找顶层窗体句柄 xff0c 并使用sendmessage向顶层窗体发送消息并执行消息内的逻辑 xff08 验证实例如下 xff09 public partial
  • c#中使用Marshal手动在堆中创建非托管内存并使用

    使用 Marshal 做出可以快速释放内存的大数组 需要不断申请一段大内存数组 xff0c 然后就释放他 xff0c 但是 C 对于大内存不是立刻释放 xff0c 所以就存在一定的性能问题 在博客园看到了一位大神使用 Marshal 做出快
  • C#-利用Marshal类实现序列化

    主要是使用Marshal类里的两个方法 xff1a 第一个是StructureToPtr xff0c 将数据从托管对象封送到非托管内存块 第二个是PtrToStructure xff0c 将数据从非托管内存块封送到新分配的指定类型的托管对象
  • c#中事件注册多个委托并获取委托列表

    using System namespace 委托和事件 internal class Program private static void Main string args Action action 61 One action 43
  • vnc怎么注册,教你3步解决vnc怎么注册

    VNC Virtual Network Computing 是一款优秀的远程控制工具软件 xff0c 由著名的AT amp T的欧洲研究实验室开发的 VNC是在基于UNIX和Linux操作系统的免费的开放源码软件 xff0c 远程控制能力强
  • C#中4种深拷贝方法实例

    1 xff1a 利用反射实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public static T DeepCopy lt T gt T obj 如果是字符串或值类型则直接返回 if obj is string
  • c#子线程和主线程创建窗体时顶层显示的区别

    主线程 1 设置TopLevel xff0c Topmost bringfront属性 子线程 2 在可在Load事件里注册循环设置TopLevel xff0c Topmost bringTofront属性的方法 xff0c 如下 frm
  • 模态对话框阻塞主线程的话不影响其他线程操作主线程控件(不阻塞)

    Task Factory StartNew 61 gt Thread Sleep 5000 this Invoke new Action 61 gt this button7 Text 61 34 aaaaaaaaaaaaaa 34 Mes
  • Ubuntu18.04.3虚拟机安装步骤图文教程

    虚拟机的安装步骤就不教学了 xff01 自行百度 xff01 接下来 教学ubuntu18 04 3desktop amd64版本的安装和配置教程 软件下载地址详细介绍 xff1a ubuntu 18 04 3 下载速度很快 xff1a 2
  • Linux安装QTCreator问题解决汇总

    关于Ubuntu18版本下新安装Qtcreator编译报错 cannot run compiler clang 43 43 output的解决办法 前两次本以为记住了 xff0c 结果第三次再次在Linux下安装qtcreator依然捣鼓搞
  • Qt路径中常用字符“./”、“../”、“/”、“*”的含义

    在Qt中进行编程时 xff0c 当我们需要调用某些路径时候 xff0c 特别是调用QDir类进行访问时 xff0c 会定义一系列的字符串 xff0c 并将这些字符串赋值给路径 xff0c 这时候就出现了一个问题 xff0c 这些字符串所代表

随机推荐

  • Qt工程pro文件的配置和头文件和库的添加

    Qt开发中 xff0c pro文件是对正工程所有源码 编译 资源 目录等的全方位配置的唯一方式 xff0c pro文件的编写非常重要 xff0c 以下对几个重要项进行说明 xff08 win和linux xff0c mac平台通用配置 xf
  • Qt -线程基础(QThread、QtConcurrent、信号槽等)

    昨晚看Qt的Manual xff0c 突然发现下一个版本的Qt中 Qt4 7 4 Qt4 8等 增加了一个特赞的介绍多线程的文章 xff1a Thread Basics 注意 xff1a 该链接以后会失效 xff0c 但是 到时候你直接看Q
  • Qt中线程同步的几种方法详解

    1 QMutex类 QMutex类就像一把锁 xff0c 在互斥量以前上锁 xff08 QMutex lock xff09 xff0c 而后在使用完互斥量以后解锁 xff08 QMutex unlock xff09 好比下面的代码 xff1
  • Qt中多线程同步总结示例

    1 QMutex QMutex mutex void func mutex lock mutex unlock 2 QMutex联手QMutexLocker 在复杂函数或者异常处理中 xff0c 对mutex进行lock 和unlock 操
  • vnc远程连接ubuntu,如何实现vnc远程连接ubuntu教程图解

    Ubuntu Linux是由南非人马克 沙特尔沃思 Mark Shuttleworth 创办的基于Debian Linux的操作系统 Ubuntu几乎包含了所有常用的应用软件 xff1a 文字处理 电子邮件 软件开发工具和Web服务等 用户
  • 什么是元学习?

    作者 Aleksandr Movchan 编译 VK 来源 Medium 人工智能的一个基本问题是它无法像人类一样高效地学习 许多深度学习分类器显示了超人的表现 xff0c 但需要数百万个训练样本 知识不共享 xff0c 并且每个任务都独立
  • Qt-多线程-QThread分析总结

    QThread是Qt提供的线程类 xff0c 每一个QThread均可管理一个线程 其具有两种使用方式 xff1a 1 继承为QThread的子类 xff1b 2 继承为QObject的子类 xff0c 并使用QObject moveToT
  • C++中 二重指针详解

    前言 上篇博文讲到数组和指针的一些关系 xff0c 本篇博文会在这基础之上讲解一些更为复杂的指针 xff0c 这些指针在笔试题中经常出现 xff0c 对刚毕业找工作的大学生有很大的作用 指向指针的指针 在指针篇 xff08 1 xff09
  • C++中数组初始化方法

    定义 xff1a int pia 61 new int 10 array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组 xff0c 并返回指向该数组第一个元素的指针 xf
  • 类对象的内存和堆空间的内存及初始化详解

    对象的内存 对象的内存可以存在于 3 种地方 xff1a 全局区 xff08 数据段 xff09 xff1a 全局变量栈空间 xff1a 函数里面的局部变量堆空间 xff1a 动态申请内存 xff08 malloc new等 xff09 文
  • C++内存空间管理

    1 C 43 43 内存机制 1 栈 Stack xff0c 函数中的局部变量 xff0c 由编译器负责分配释放 xff0c 函数结束 xff0c 变量释放 2 堆 Heap xff0c 通过new 申请的内存 xff0c 由delete或
  • Qt中跨线程下信号和槽的使用方法

    connect用于连接qt的信号和槽 xff0c 在qt编程过程中不可或缺 它其实有第五个参数 xff0c 只是一般使用默认值 xff0c 在满足某些特殊需求的时候可能需要手动设置 Qt AutoConnection xff1a 默认值 x
  • Qt 中开启线程的多种方式小结

    简介1 继承 QThread 重写 run 函数2 继承 QObject 调用 moveToThread3 继承 QRunnable 重新 run 函数 xff0c 结合 QThreadPool 实现线程池4 使用 C 43 43 11 中
  • Qt中exec函数的作用

    Qt中的exec 方法到处可见 xff0c 例如 xff1a QCoreApplicaton exec QApplication exec QDialog exec QThread exec QMenu exec 那么 xff0c 这些ex
  • 在Qt中使用全局变量的两种方式,及出现无法解析的命令的问题

    很多小伙伴在Qt编程时 xff0c 不会使用全局变量 xff0c 其实基本有两种方式来定义使用全局变量 xff0c 第一种是根据c c 43 43 的extern来进行多文件的使用 xff0c 第二种方法就是把全局变量放在类中 xff0c
  • Qt中信号槽形参值传递,引用传递,指针传递的实例及总结

    在同一个线程中 当信号和槽都在同一个线程中时 xff0c 值传递参数和引用传递参数有区别 xff1a 值传递会复制对象 xff1b xff08 测试时 xff0c 打印传递前后的地址不同 xff09 引用传递不会复制对象 xff1b xff
  • vnc远程连接,5个步骤教你如何轻松实现vnc远程连接

    当我们在进行vnc远程连接时 xff0c 往往找不到有用的工具来支撑我们的工作 那当我们在进行vnc远程连接时 xff0c 有什么工具能让我们快速实现vnc远程连接呢 xff1f iis7服务器管理工具 如图 xff1a IIS7服务器管理
  • 关于qt信号槽传指针与释放指针

    今天 xff0c 意外发现qt中信号槽传指针的方式进行时 xff0c 会发生释放不掉指针所分配的空间的情况 定义一个信号 void emit showTime Data 槽 void slot showTime Data 在发出信号之前动态
  • Qt-信号和槽函数传递自定义参数前需注册自定义数据类型

    Qt 信号和槽函数参数只能是基于 Qt 的基础类型的 xff0c 比如 QString int bool 等 xff0c 如果想传递自定义类型默认情况下是行不通的 要想在 Qt 的信号和槽函数之间传递自定义类型 xff0c 可以先将自己的自
  • Qt 设置窗口背景图片的几种方法实例

    1 在paintEvent事件中绘制图片 void Widget paintEvent QPaintEvent ev QPainter painter this painter drawPixmap rect QPixmap 34 bg j