概述

转眼七年过去了,我是一个彻底拥抱过MFC的人,记得老大的一个需求要把按钮做成圆角,并添加背景颜色,做前端html的可能认为很简单,然而放到MFC上那可真的是很...很麻烦的,自定义类继承Button ,新手估计还搞不定,怎么也有上百行代码,实在不友好,Qt诞生大大简化了这些工作,只需要使用QSS(Qt Style Sheet)就可以轻松做到,最近详细了解了QSS,做了个百度网盘的登录界面,整理好我会把源码放出来,供大家参考。

QSS语法

background-color:rgb(6, 168, 255);      背景色

color:red;                  字体颜色

border-radius:5px;              边框圆角半径

border:2px solid green;         边框2像素,实现,绿色

font:10pt;               字体大小10

设置QSS方法

方法一:UI界面设置

鼠标到按钮上右键,"改变样式表",在编辑样式表对话框中添加QSS样式。

方法二:程序添加

每一个控件都有setStyleSheet(const QString &styleSheet)方法,样式字符串直接传参即可,例:

ui.pushButton1->setStyleSheet("QPushButton{background-color: white;  color: rgb(100, 100, 100) ;}");

方法三:通过QSS文件添加

新建文件StyleSheet.qss文件,添加内容如下:

/*按钮静止无操作样式*/
QPushButton
{background-color:rgb(255,255,255); color:rgb(6,168,255); border:2px solid rgb(6,168,255); font-size:14px; border-radius:10px;
}/*鼠标悬停在按钮*/
QPushButton:hover
{background-color: rgb(212,243,255); color:rgb(6,168,255);border:2px solid rgb(6,168,255); border-radius:14px;
}/*鼠标按下按钮*/
QPushButton:pressed
{background-color: rgb(175,232,255); color:white; border:2px solid rgb(6,168,255); border-radius:14px;
}

读取配置文件设置指定按钮样式:

StyleDialog::StyleDialog(QWidget *parent): QDialog(parent)
{ui.setupUi(this);QString strStyle = ReadQssFile("StyleSheet.qss");ui.pushButton2->setStyleSheet(strStyle);
}StyleDialog::~StyleDialog()
{
}QString StyleDialog::ReadQssFile(const QString& filePath)
{QString strStyleSheet = "";QFile file(filePath);file.open(QFile::ReadOnly);if (file.isOpen()){strStyleSheet = QLatin1String(file.readAll());}return  strStyleSheet;
}

实际项目中一般qss文件直接添加到资源里面,一起打包到EXE文件中,这样文件不会直接暴露给用户。

Selector

一个UI界面有很多控件,使用一个qss文件来指定样式时,可以使用Selector来分别设置控件的样式

1.属性覆盖,一个qss文件里,后面定义的style会覆盖先前的style。

2.同一行中多个类型需要用逗号分隔。

QPushButton, QLineEdit, QCheckBox
{background: color: black;
}

3.属性分类

例如:有6个PushButton控件,3个设置为样式一,另外三个设置为样式二

方法一:

设置前3个控件的whatsThis为style1,后三个控件为style2

修改StyleSheet.qss文件内容

QPushButton[whatsThis="style1"]
{background-color: rgb(63,141,215);color:green;
}QPushButton[whatsThis="style2"]
{background-color: rgb(63,141,215);color:red;
}

方法二:

直接在qss文件里指定object name,不推荐这种方式,6个控件需要些六遍,分别指定object name。

QPushButton#pushButton1
{background-color: rgb(63,141,215);color:red;
}

最后在程序的入口函数设置如下代码:

    QApplication a(argc, argv);StyleDialog styleDialog;a.setStyleSheet(styleDialog.ReadQssFile(":/qtlearn/Resources/StyleSheet.qss"));

最后附上一张使用QSS技术仿的百度网盘界面:

【Qt开发】StyleSheet使用总结相关推荐

  1. 为什么要用Qt开发(Qt跨平台应用开发)

    一.为什么选择qt 1.跨平台,一次写代码多个平台编译.使跨平台应用达到各个平台原生应用的体验与流畅度.相比与java或c#在开发图形计算方面的软件时有非常好的使用体验与流畅度. 2.使用C++编程虽 ...

  2. 01-为什么要用Qt开发(Qt跨平台应用开发)

    一.为什么选择qt 跨平台,一次写代码多个平台编译.使跨平台应用达到各个平台原生应用的体验与流畅度.相比与java或c#在开发图形计算方面的软件时有非常好的使用体验与流畅度. 使用C++编程虽然没有j ...

  3. QT开发笔记(多媒体)

    多媒体 多媒体(Multimedia)是多种媒体的综合,一般包括文本,声音和图像等多种媒体形式. 在计算机系统中,多媒体指组合两种或两种以上媒体的一种人机交互式信息交流和传播媒体. 使用的媒体包括文字 ...

  4. 用QT开发软件怎么实现一键换肤

    QT开发软件实现一键换肤可以使用QSS样式表和QResource动态加载资源. 创建不同的QSS样式表文件,定义不同的样式. 使用QResource动态加载样式表文件. 在程序中设置当前使用的样式表. ...

  5. 基于QT开发的音乐播放器(附源码)

    基于QT开发的音乐播放器(附源码) 一.简介 1.介绍 2.功能描述 3.系统功能层次模块图 4.各模块功能描述 (1)播放界面 (2)歌词 (3)歌曲信息 (4)歌曲列表 5.文件格式 6.运行环境 ...

  6. qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...

    作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...

  7. QT开发(五十)——QT串口编程基础

    QT开发(五十)--QT串口编程基础 一.QtSerialPort简介 1.串口通信基础 目前使用最广泛的串口为DB9接口,适用于较近距离的通信.一般小于10米.DB9接口有9个针脚. 串口通信的主要 ...

  8. 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容...

    [Qt开发][VS开发][Linux开发]OpenCV.Qt-MinGw.Qt-msvc.VS2010.VS2015.Ubuntu Linux.ARM Linux中几个特别容易混淆的内容 标签:[Qt ...

  9. [转]使用QT开发GoogleMap瓦片显示和下载工具

    第一节 之前做项目的时候经常遇到需要大量地图背景数据,然后没有数据被逼着去Google上下载瓦片数据在拼接成整张影像的工作,其实遥感影像晚上有很多可以下载到的,但是大部分是作为研究用的,作为GIS的背 ...

  10. QT开发(六十四)——QT样式表(二)

    QT开发(六十四)--QT样式表 本文主要翻译自QT官方文档Qt Style Sheets . 五.QT样式表参考 QT样式表支持多种的属性.状态和子控件,使得定制组件的外观成为可能. 1.组件 以下 ...

最新文章

  1. MongoDB基本命令总结
  2. CISCO专用协议CDP
  3. [android网络有效性检测] NetworkMonitor代码造成内存泄漏
  4. 【JavaScript】js数组与字符串的相互转换
  5. python训练营朋友圈留言_用Python发一个高逼格的朋友圈【附代码】
  6. 使用sqlite3创建数据库表的时候须要注意
  7. Dubbo(四) 消费者、提供者工程搭建并使用注解实现远程调用
  8. 插件化开发与GUI开发
  9. Java注解之自定义注解
  10. maven只是经手,不是触发:org.apache.maven.lifecycle.LifecycleExecutionException
  11. 统计学习基础(ESL)中文版
  12. 难得干货,揭秘支付宝的2维码扫码技术优化实践之路
  13. 网上银行“安全登录控件”分析(zt)
  14. matlab 直流无刷电机,无刷直流电机的matlab仿真.pdf
  15. ps画画模糊笔刷_用ps污点画笔修复工具讲图片变成朦胧效果
  16. 【零信任落地案例】吉大正元某大型集团公司零信任实践案例
  17. WordPress遇到qq邮箱不能注册,不能重置密码问题(您的密码重设链接无效,请在下方请求新链接。)
  18. 从VB来看-InsertionSort(VB插入排序)
  19. Nagios-config
  20. mysql里any是什么_【MySQL】mysql中any,in,some,all的区别

热门文章

  1. ActiveMQ学习:Hello ActiveMQ
  2. NET中所有的功能快捷键
  3. Windows下能PING通网关不能打开网页解决方法
  4. 11 种方法教你用 Python 高效下载资源
  5. 为监控主机添加SNMPv3模板
  6. ASP.NET Core 中间件Diagnostics使用 异常和错误信息
  7. 解决js跨域使用nginx配置问题
  8. 解决ScrollView嵌套RecyclerView出现item显示不全的问题
  9. Spring Cloud 异常处理
  10. js中改变原数组的方法以及解决改变原数组的方法