QT 对话框添加背景图片的方法

2023-05-16

1. QPalette的方法

#include  < QApplication >
#include 
< QtGui >

int  main( int  argc,  char   * argv[])
{
    QApplication app(argc,argv);
    
    QFrame 
* frame  =   new  QFrame;
    frame
-> resize( 400 , 700 );
    QPixmap pixmap("images/frame.png");
    QPalette   palette;
    palette.setBrush(frame
-> backgroundRole(),QBrush( pixmap ));
    frame
-> setPalette(palette);
    frame->setMask(pixmap.mask());  //可以将图片中透明部分显示为透明的
    frame
-> setAutoFillBackground( true );
    frame
-> show();

    
return  app.exec();
}

注意图片路径怎么表示,我的图片放在该工程下的images文件夹中。
存在问题:图片可以显示出来,但是图片大小不能和frame大小一致,显示效果不好,具体怎样调整大小,以后再补充,效果如下(设置了透明的,好像很漂亮~透明部分将我的桌面显示出来了~_~):

2.setStyleSheet方法(非常好用的方法)

#include  < QApplication >
#include 
< QtGui >

int  main( int  argc,  char   * argv[])
{
    QApplication app(argc,argv);
    QFrame 
* frame  =   new  QFrame;
    frame
->setObjectName("myframe" );
    frame
-> resize( 400 , 700 );
    frame
-> setStyleSheet( " QFrame#myframe{border-image:url(images/frame.png)} "  );
    frame
-> show();

    
return  app.exec();
}

效果如下:

 

注意:很漂亮的效果吧~~注意代码中红线的部分噢,设置ObjectName后,才能保证setStyleSheet只作用在我们的frame上,不影响其子控件的背景设置。之所以用border-image而不用background-image,还是上面的问题,用background-image不能保证图片大小和控件大小一致,图片不能完全显示,这个以后再补充了,现在还没有找到方法。

3.paintEvent事件方法

// myframe.h文件
#ifndef MYFRAME_H
#define  MYFRAME_H

#include 
< QWidget >
#include 
< QtGui >

class  MyFrame :  public  QWidget
{
public :
    MyFrame();
    
void  paintEvent(QPaintEvent  * event );
};

#endif   //  MYFRAME_H

// myframe.cpp文件
#include  " myframe.h "

MyFrame::MyFrame()
{
}

void  MyFrame::paintEvent(QPaintEvent  * event )
{
    QPainter painter(
this );
    painter.drawPixmap(
0 , 0 , 400 , 700 ,QPixmap( " images/frame.png " ));
}

// main.cpp文件
#include  < QApplication >
#include 
< QtGui >

#include 
" myframe.h "

int  main( int  argc,  char   * argv[])
{
    QApplication app(argc,argv);
    
    MyFrame 
* frame  =   new  MyFrame;
    frame
-> resize( 400 , 700 );
    frame
-> show();

    
return  app.exec();
}

效果如下:

注:跟前面一样的效果吧,与前面的差别就是这个背景图片不随着窗口的大小而变化,因为它的固定大小被设置成(400,700)了。重写QWidget的paintEvent事件,当控件发生重绘事件,比如show()时,系统就会自动调用paintEvent函数。


好了,上面是三种设置背景图片的方法,下面我要说一个设置QPushButton的背景图片的方法,用的是setIcon方法(其实QPushButton设置背景图片也可以用前面三种方法的,不过现在这种Icon方法的看起来也不错)

#include  < QApplication >
#include 
< QtGui >

int  main( int  argc,  char   * argv[])
{
    QApplication app(argc,argv);

    QFrame 
* frame  =   new  QFrame;
    QPushButton 
*  button0  =   new  QPushButton(frame);
    QPushButton 
*  button1  =   new  QPushButton(frame);
    QPushButton 
*  button2  =   new  QPushButton(frame);
    QPushButton 
*  button3  =   new  QPushButton(frame);
    QPushButton 
*  button4  =   new  QPushButton(frame);
    QPushButton 
*  button5  =   new  QPushButton(frame);

    frame
-> setObjectName( " myframe " );
    frame
-> resize( 400 , 700 );
    frame
-> setStyleSheet( " QFrame#myframe{border-image:url(images/frame.png)} "  );

    button0
-> setGeometry( 60 , 150 , 68 , 68 );
    button1
-> setGeometry( 160 , 150 , 68 , 68 );
    button2
-> setGeometry( 260 , 150 , 68 , 68 );
    button3
-> setGeometry( 60 , 280 , 68 , 68 );
    button4
-> setGeometry( 160 , 280 , 68 , 68 );
    button5
-> setGeometry( 260 , 280 , 68 , 68 );

    QIcon icon;
    QPixmap pixmap0(
" images/SMS.png " );
    icon.addPixmap(pixmap0);
    button0
-> setIcon(icon);
    button0
-> setIconSize(QSize( 68 , 68 ));
    button0
-> setFixedSize(pixmap0.size());
    button0
-> setMask(pixmap0.mask());


    QPixmap pixmap1(
" images/EMail.png " );
    icon.addPixmap(pixmap1);
    button1
-> setIcon(icon);
    button1
-> setIconSize(QSize( 68 , 68 ));
    button1
-> setFixedSize(pixmap1.size());
    button1
-> setMask(pixmap1.mask());


    QPixmap pixmap2(
" images/Contacts.png " );
    icon.addPixmap(pixmap2);
    button2
-> setIcon(icon);
    button2
-> setIconSize(QSize( 68 , 68 ));
    button2
-> setFixedSize(pixmap2.size());
    button2
-> setMask(pixmap2.mask());

    QPixmap pixmap3(
" images/Calendar.png " );
    icon.addPixmap(pixmap3);
    button3
-> setIcon(icon);
    button3
-> setIconSize(QSize( 68 , 68 ));
    button3
-> setFixedSize(pixmap3.size());
    button3
-> setMask(pixmap3.mask());


    QPixmap pixmap4(
" images/GoogleVoice.png " );
    icon.addPixmap(pixmap4);
    button4
-> setIcon(icon);
    button4
-> setIconSize(QSize( 68 , 68 ));
    button4
-> setFixedSize(pixmap4.size());
    button4
-> setMask(pixmap4.mask());


    QPixmap pixmap5(
" images/AndroidMarket.png " );
    icon.addPixmap(pixmap5);
    button5
-> setIcon(icon);
    button5
-> setIconSize(QSize( 68 , 68 ));
    button5
-> setFixedSize(pixmap5.size());
    button5
-> setMask(pixmap5.mask());


    frame
-> show();

    
return  app.exec();
}

效果如下:

注:图标效果不错吧~_~

好了,今天就写到这里,以后有新的内容再补充。
补充,这样就可以让图片跟窗口一样大小了。

int  main( int  argc,  char   * argv[])
{
    QApplication app(argc,argv);
    
    QFrame 
* frame  =   new  QFrame;
    frame
-> resize( 400 , 700 );

    QImage image1;
    image1.load(
" images/frame1.jpg " );
    QImage image2 
=  image1.scaled( 400 , 700 );

    QPalette   palette;
    palette.setBrush(frame
-> backgroundRole(),QBrush(image2));
    frame
-> setPalette(palette);
    frame
-> setMask(pixmap.mask());   // 可以将图片中透明部分显示为透明的
    frame -> setAutoFillBackground( true );
    frame
-> show();

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

QT 对话框添加背景图片的方法 的相关文章

  • B2092 开关灯 【入门】

    原题链接 开关灯 开关灯 题目描述 假设有 N N N 盏灯 xff08 N N N 为不大于
  • 编程:Python实现图片识别

    OCR技术是光学字符识别的缩写 Optical Character Recognition xff0c 是通过扫描等光学输入方式将各种票据 报刊 书籍 文稿及其它印刷品的文字转化为图像信息 xff0c 再利用文字识别技术将图像信息转化为可以
  • 惠普暗影精灵5 plus 17.3寸如何安装Ubuntu18.04

    人工智能如火如荼 xff0c 没有显卡感觉人生好像缺少一点啥 xff0c 于是入手惠普暗影精灵5 plus 17 3 RTX2070 买回来装ubuntu 18 04 xff0c 标准流程 xff0c U盘刻录iso安装 结果安装好之后 x
  • 最简单ubuntu systemd开机启动

    1 创建etc systemd system clash service sudo vim etc systemd system clash service Unit Description 61 clash service After 6
  • ubuntu 20.04 anyconnect使用

    1 下载anyconnect linux64 4 10 05085 predeploy k9 tar gz并解压缩 tar zvxf anyconnect linux64 4 10 05085 predeploy k9 tar gz 2 安
  • repo init出现Permission denied (publickey)如何解决

    如果确定公钥已经在服务器上正确配置 xff0c 还是在repo init的时候报如下错误 Downloading Repo source from https gerrit googlesource com git repo manifes
  • docker内使用gpu

    创建容器 docker run it d name xiaxinkaigpu v datadrive xxk github github gpus all nvidia cuda 10 0 devel ubuntu16 04 进入容器 do
  • 编译protobuf v3.20.0

    https github com protocolbuffers protobuf git clone git 64 github com protocolbuffers protobuf git cd protobuf git check
  • Ubuntu18.04安装配置Samba

    1 安装samba sudo apt install samba 2 添加用户 xiaxinkai 64 aliyun etc samba sudo smbpasswd a xiaxinkai New SMB password Retype
  • 【开发工具】适用于Windows的Linux子系统一一WSL安装使用教程

    文章目录 一 简介二 准备工作二 安装WSL2 1 启用适用于 Linux 的 Windows 子系统2 2 启用虚拟机功能2 3 安装所选的 Linux 分发 一 简介 Windows Subsystem for Linux xff08
  • github如何删除commit记录

    git reset hard acb28f2114413378d48ae3b257dca62a1cd29d0f 想要恢复到的版本commit id git push origin HEAD force
  • Windows7 PowerShell 2.0升级到 PowerShell 5.1

    Windows7 sp1内置的PowerShell的版本是v2 0 xff0c 现需要将其升级到v5 1 xff0c 过程中有一个环节需要引起注意 xff0c 为了以后查阅的方便 xff0c 现将其记录下来 1 查看PowerShell版本
  • 解决:硬盘安装Ubuntu16.04引导后加载失败

    按照网上硬盘安装Ubuntu的方法 xff0c 配置完毕后每次都在这个画面之后黑屏 xff0c 卡住不动 xff0c 加载失败 网上找了很多办法 xff0c 有的说是UEFI的问题 xff0c 有的说是N卡不兼容 xff0c 尝试了很多都没
  • Appuim+Pycharm+Pytest 自动化测试环境搭建 Mac版

    这一套流程有很多坑 xff0c 因为最近换主机原因被迫搭了2 xff0c 3次 xff0c 忍无可忍打算记录一下超详细的搭建过程 注意 xff1a 下载环境过程中 xff0c 下文有很多链接地址需要访问GitHub外网 xff0c 访问不了
  • [Mac 基础知识]:用Time Machine 恢复mac系统

    如果您使用 Time Machine 来备份 Mac xff0c 则在系统或启动磁盘损坏时可以恢复系统 Important 使用 Time Machine 备份将您的系统恢复到该备份的源 Mac 若 要将信息传输到新 Mac xff0c 请
  • jetson-tx2-4g ubuntu18系统设置中desktop sharing 无法打开的问题

    1 系统设置中desktop sharing无法打开需要进行以下几步 xff1a sudo apt get install vino dconf editor dconf write org gnome desktop remote acc
  • ubuntu18.04安装xrdp过程

    一 安装桌面环境 以具有 sudo 权限的用户身份键入以下命令 xff0c 以在服务器上安装 Xfce xff1a sudo apt update sudo apt install xfce4 xfce4 goodies xorg dbus
  • 瑞芯微RV1126/1109开发流程之模型转换

    1 环境搭建 xff08 PC端ubuntu16 04搭建rknn环境 xff09 xff08 1 xff09 安装anaconda环境 xff08 为了便于管理自己的环境建议安装 xff0c 安装步骤请自行搜索 xff0c 本人安装ana
  • 瑞芯微RV1126/1109开发流程之驱动升级

    1 1126硬件参数读取 xff08 1 xff09 CPU温度读取 46300和47100分别代表46 3 47 1 xff08 2 xff09 查看1126的NPU xff08 3 xff09 查询NPU驱动版本 dmesg grep
  • 如何在 ubuntu 安装并配置Go?

    如何在 ubuntu 安装并配置Go xff1f 虽然安装和配置go很简单 xff0c 但是很多初学者在第一次安装go环境时会遇到各种坑 这篇博客完整演示一次如何在ubuntu上安装和配置golang 第一步 xff0c 查看系统版本 xf

随机推荐