自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:

扫码关注公众号

1.Qss 的setStyleSheet设置背景图片

1.1background-image设置平铺或者居中

这种方法设置的要点是要将图片添加到qrc文件中,形成资源路径,然后在QT界面编辑或者程序代码中通过设置路径来实现背景图片设置。图片大小不能自适应控件大小。只能可以实现平铺或者居中显示。background-position:center;设置显示位置,background-repeat:no-repeat;设置是否平铺;

(1)平铺重复显示

QWidget#widgetWinPic

{

background-image:url(:/FaceMatch/Resources/pic/viewbackin.png);

background-repeat:repeat;

}

或者代码中ui.widgetWinPic.setStyleSheet("QPushButton{ background-image: url(:/FaceMatch/Resources/pic/viewbackin.png);background-repeat:repeat;");

(2)居中不重复设置

QWidget#widgetWinPic

{

background-image:url(:/FaceMatch/Resources/pic/viewbackin.png);

background-position:center;

background-repeat:no-repeat;

}

或者代码中 ui.widgetWinPic.setStyleSheet("QPushButton{ background-image: url(:/FaceMatch/Resources/pic/viewbackin.png);background-position:center;background-repeat:no-repeat;");

1.2 border-image设置按照控件大小缩放填充整个控件

图片被拉伸填满整个控件,可以实现缩放拉伸填充。会跟着控件的大小变化进行缩放,下图左侧是正常尺寸,右侧是放大后的样子

QWidget#widgetViewVedio

{

background-color:rgba(0,48,77,0.7);

border-image:url(:/FaceMatch/Resources/pic/viewbackin.png);

}

或者直接在代码中设置

ui.widgetViewVedio->setStyleSheet(QLatin1String("QWidget#widgetViewVedio\n"

"{\n"

"background-color:rgba(0,48,77,0.7);\n"

"border-image:url(:/FaceMatch/Resources/pic/viewbackin.png);\n"

"}\n"

""));

2.使用QPixmap load图片,然后setPixmap到控件上。可以实现图片的填充,缩放,保持宽高比缩放。可以加载目标路径下的图片作为背景图。缺点是不图片的大小不能随着Qlabel的大小变化。如果要能够根据Qlabel大小自动变化,需要设置ui.labelPic->setScaledContents(true);这样只能是缩放填充的形式,不能保持图片的宽高比。也可以重写resize函数,按照QLabel的大小,动态调整Pixmap的大小,可以实现大小自动调整。但是如果是在自动布局中,窗口放大,再缩小,因为pixmap图片尺寸由大变小,窗口被大图片撑大,大小无法及时调整,自动布局中会出现布局乱的情况。

enum AspectRatioMode {

IgnoreAspectRatio,//完全填充,图片会被拉伸到整个size

KeepAspectRatio,//按图片比例缩放,保持宽高比,按QLabel的高度或者宽度填满图片,如果要聚众可以调用setAlignment(Qt::AlignCenter);实现居中显示

KeepAspectRatioByExpanding//    保持图片的宽高比,同时要放大图片填充到整个窗口。

};

QPixmap pix(picData.strPicPath);

pix= pix.scaled(ui.labelPic->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);

ui.labelPic->setPixmap(pix);

3.继承QLabel类,重写paintEvent函数,用QPaintEvent去绘制图片。这种方法是最灵活的,可以按照自己想要的任何方式描绘背景。可以实现“居中”、“平铺”、“缩放”、“拉伸”。缺点是要计算绘制的尺寸和位置,要实现宽高比缩放,还需要通过判断图片的宽高和QLabel的宽高来计算。下面的方法实现的是保持图片的宽高比,最大化居中显示图片,而且可以随着QLabel的大小动态更新图片的大小。只要设置一个图片的路径进去,就可以。实现的效果是保持宽高比,大小随着QLabel大小自动变化。

头文件

#ifndef ASPECTRATIOPIXMAPLABEL_H#define ASPECTRATIOPIXMAPLABEL_H#include#include

class AspectRatioPixmapLabel : publicQLabel

{

Q_OBJECTpublic:

AspectRatioPixmapLabel(QWidget*parent = 0);voidsetPath(QString strPath)//设置图片路径

{

m_strPath=strPath;

pix=QPixmap(m_strPath);//创建Pixmap对象

update();//这里需要刷新下,触发重绘,paintEvent会去画图片,否则不触发重绘,不会花图片,QLabel大小变化时,也会触发重绘,自动去按Qlabel尺寸重绘图片

}void setScalPixmap(constQPixmap p);//设置变化的protected:void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;//重写重绘函数private:

QPixmap pix;//保存图片Pixmap

QString m_strPath= "";//保存图片路径

};#endif //ASPECTRATIOPIXMAPLABEL_H

源文件

#include "aspectratiopixmaplabel.h"#includeAspectRatioPixmapLabel::AspectRatioPixmapLabel(QWidget*parent) :

QLabel(parent)

{//this->setMinimumSize(1, 1);

setStyleSheet("font-family: MicrosoftYaHeiUI;font-size: 14px;color:#028EC0;letter-spacing: 0;line-height: 20px;");

setScaledContents(false);

show();

}void AspectRatioPixmapLabel::paintEvent(QPaintEvent *env)

{//让图片按照Qlabel的大小进行缩放,保持宽高比。

if (!pix.isNull())

{

QPainter painter(this);

QSize labelsize= this->size();

pix= pix.scaled(this->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);

QSize pixsize=pix.size();//根据图片的宽高和QLabel的宽高计算绘图的矩形区域和坐标

QRect rectPic(0, 0, pix.size().width(), pix.size().height());if (pix.width() < this->width())

{

rectPic.setX((this->width() - pix.width()) / 2);

rectPic.setY(0);

rectPic.setWidth(pix.size().width());

rectPic.setHeight(pix.size().height());

}if (pix.height() < this->height())

{

rectPic.setX(0);

rectPic.setY((this->height() - pix.height()) / 2);

rectPic.setWidth(pix.size().width());

rectPic.setHeight(pix.size().height());

}

QSize pimageszie=pix.toImage().size();

painter.drawImage(rectPic, pix.toImage());

}

}

主程序中new一个对象,然后插入到一个widget的布局中,QLabel大小随着widget自动缩放,里面的图片也会自动调整大小。

主程序代码实例:

m_pAspectLabelPicShow = newAspectRatioPixmapLabel(ui.widgetWinPic);

ui.verticalLayout_5->addWidget(m_pAspectLabelPicShow);

4.小结

方法

优点

缺点

Setstylesheet

Background-image可以实现平铺、居中,无法实现拉伸,缩放,自动调整。border-image可以实现填充、拉伸、自动调整大小。

需要将图片添加到资源qrc中,无法实现pixmap的加载。无法实现保持图片的宽高比。

SetPixMap

可以实现居中、填充、保持宽高比、自动调整大小。

自动布局中缩放会引起窗体尺寸变化,不能恢复到原尺寸。

paintEvent

可以实现居中、平铺、填充、缩放、保持宽高比、自动调整大小等。

需要计算位置和绘图区域,计算比较复查。

qt 背景和控件布局_Qt控件背景图片设置总结相关推荐

  1. qt中QHBoxLayout或QVBoxLayout布局内控件的动态生成与显示

    ---恢复内容开始--- qt中QHBoxLayout或QVBoxLayout布局内控件的动态生成与显示 打个比方,我现在写个小例子,这个小例子是这样的,整个界面分为俩个部分,分为上半部分和下半部分, ...

  2. qt 背景和控件布局_Qt编写自定义控件26-平铺背景控件

    一.前言 平铺背景控件,主要的应用场景是作为画布出现,黑白相间的背景图,然后上面可以放置图片图形等,使得看起来更美观,比如PS软件新建图层以后的背景,FireWorks软件新建画布以后的透明背景,IC ...

  3. 学习《GUI Qt4 编程》笔记-02-代码实现控件布局-设计师控件布局

      对话框,之所以被成为对话框,是因为它们为用户和应用程序之间提供了一种可以相互"交谈"的交互方式.   绝大多数的图形用户界面应用程序都带有一个有菜单栏.工具栏构成的主窗口以及几 ...

  4. qt 背景和控件布局_QT 设计师使用样式表添加背景

    QT create中样式表可以用来设置背景图.背景颜色.字体大小格式颜色等 1.添加背景图的话需要先添加资源文件 右击项目文件选择添加新文件,再选择QT资源文件(QT resource file)然后 ...

  5. Android笔记之Android基本控件布局与Activity的生命周期

    前言 喜欢安卓里千奇百怪的app,酷炫的UI或者好玩的游戏.想知道那些软件是如何做的,为什么我在微博里发一条消息,就能一直存在网上,让别人看到?为什么我点击一个按钮就出现了一个效果,某个功能?为什么滑 ...

  6. python第三方库tkinter之Label控件和Button控件

    from tkinter import * window =Tk() window.title("dalaijun")#窗口标题 window["background&q ...

  7. 响应式布局经典范例——巨幅背景大标题

    效果如下 电脑浏览器最大时的效果: 电脑浏览器窗口变窄的效果: 电脑浏览器窗口最窄的效果: 手机上的效果: 完整范例代码 <!DOCTYPE html> <html lang=&qu ...

  8. speedoffice(PPT)怎么将插入的图片设置成背景?

    插入到PPT的图片,怎么设置成背景呢? 方法一:用speedoffice打开PPT图像后,在图片上任意位置右键,出现的选项卡里面选择"添加到布局"即可实现将图片设置为背景 方法二: ...

  9. myeclipse窗口布局控件任意_木辛老师的编程课堂:Python和Qt第2讲之布局管理初探(三)...

    在主窗口中放置多个控件,最好的方法是使用布局.控件的布局是学习PyQt路上比较关键也也是比较难理解的部分,赶快跟着木辛老师一起去看看吧. 请点击右上角"关注"按钮关注我们哟:跟着木 ...

最新文章

  1. sql查询字段结果显示部分_SQL语句结构分析
  2. 按文件类型获取其图标
  3. jetson nano 系统镜像制作_参考备份Jetson Nano系统(该程序不完备,制作的image不可用,仅供)...
  4. Mysql数据库(三)——mysql数据库高级操作
  5. jboss4 迁移_JBoss BPM Travel Agency的微服务迁移故事
  6. STM32H743+CubeMX-定时器TIM输出PWM(PWM Generation模式)
  7. Linux后台运行java的jar包,java基础面试笔试题
  8. VINS(二)Feature Detection and Tracking
  9. 计算机抓取整个屏幕的按键,技术员搞定电脑截全屏快捷键【搞定方法】
  10. 【用户画像学习笔记】——社交网络平台的用户画像介绍
  11. 【stata】一些关于数据处理的基础知识(备查代码)
  12. Java 百度ocr文字识别-发票识别,并在页面显示信息
  13. 在ASP.NET MVC中使用Boostrap实现产品的展示、查询、排序、分页
  14. 金立Android版本,金立amigo为国内首个安卓5.0手机操作系统
  15. Ghidra Java API报NoClassDefFoundError的解决方法
  16. 打造国内专业企业研发管理解决方案,ONES完成华创资本领投A+轮600万美元融资
  17. win7计算机收藏夹位置,Win7收藏夹在哪?Win7怎么找收藏夹文件路径?
  18. 第三篇 树莓派的串口通信和语音识别模块
  19. 系统设定工具与硬件侦测
  20. go : gin + lumberjack 输出日志文件

热门文章

  1. java读取utf-8文件第一行多一个问号
  2. 根据mysql数据库日志恢复删除数据
  3. forget password of WEBLOGIC user
  4. 如何申请一份iOS工作
  5. 敏捷嘉年华——敏捷之旅2012(上海站)
  6. haproxy Consistent Hash浅析
  7. 《中国管理安全服务(MSS)市场研究报告2010》读后感
  8. 偏差、方差、贝叶斯误差
  9. 推荐 10 个实用型的热门开源项目,开发效率又能提升了!
  10. centos 7.6.1810 升3.7时 python和yum被误删除的恢复