位置: IT常识 - 正文

Qss自定义属性(qss 设置字体)

编辑:rootadmin
Qss自定义属性 QSS自定义属性更多精彩内容👉个人内容分类汇总 👈👉QSS样式学习 👈文章目录QSS自定义属性@[toc]前言一、实现效果二、使用方式1.QSS设置Q_PROPERTY属性样式2.QSS设置动态属性样式3.qproperty-<属性名称>语法14.qproperty-<属性名称>语法2四、主要代码五、源代码前言Qss内置了许多的伪状态可以用于设置控件的样式动态变化(例如::checked、:hover),但在日常开发中为了更加灵活的样式,这些伪状态就不够用了;将QObject中的属性功能与Qss结合使用就会发现不一样的风景,主要有4种用法;使用Qss属性选择器设置通过【Q_PROPERTY】定义的属性的样式,当属性状态改变后控件样式跟着改变;使用Qss属性选择器设置通过【setProperty()】定义的动态属性的样式,当属性状态改变后控件样式跟着改变;使用 【qproperty-<属性名称>】语法设置通过Q_PROPERTY定义的属性的值;定义一个枚举,使用Q_ENUM或者Q_ENUMS注册枚举类型,使用Q_PROPERTY定义一个已注册的枚举类型的属性,可以通过【qproperty-<属性名称>:枚举名称】方式设置属性的值。在代码中不再是将样式表放在资源文件中,而是放到可执行程序路径下,可定制性更强。一、实现效果

推荐整理分享Qss自定义属性(qss 设置字体),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:qss属性选择器,qss指定对象,qss设置字体颜色,qss 自定义类,qss 设置字体,qss设置按钮图片,qss属性选择器,qss 自定义类,内容如对您有帮助,希望把文章链接给更多的朋友!

二、使用方式1.QSS设置Q_PROPERTY属性样式

在继承于QWidget的类中Q_OBJECT后,私有区域使用Q_PROPERTY定义一个属性;

Q_PROPERTY(bool checked READ isChecked WRITE setChecked)

在类中分别定义属性对应的变量、函数;

使用QSS属性选择器设置对应的样式,[属性名=属性值]

/* 设置Q_PROPERTY定义的属性样式 */#Widget[checked = true] { background-color: rgb(0, 255, 127);}

在程序中修改属性值后,样式不会发生变化,需要调用polish(控件) 刷新控件样式;

this->style()->polish(this);2.QSS设置动态属性样式

再Qss样式表中使用QSS属性选择器设置对应的样式,[属性名=属性值]

/* 设置动态属性样式 */#Widget[property1 = true] { background-color: rgb(255, 0, 127);}

再程序中调用setProperty() 函数设置属性值,如果没有通过Q_PROPERTY定义属性,使用setProperty(“property1”, value)设置后会将property1添加为动态属性,并且返回false

this->setProperty("property1", value)

在程序中修改动态属性值后,样式不会发生变化,需要调用polish(控件) 刷新控件样式;

this->style()->polish(this);3.qproperty-<属性名称>语法1

在继承于QWidget的类中Q_OBJECT后,私有区域使用Q_PROPERTY定义一个属性;

Q_PROPERTY(QColor BgColor READ isBgColor WRITE setBgColor)

在类中分别定义属性对应的变量、函数;

Qss自定义属性(qss 设置字体)

在Qss样式表中使用 qproperty-<属性名称>语法设置属性的值。

/* 通过Qss设置Q_PROPERTY定义的属性的值 */#Widget { qproperty-BgColor: rgb(255, 0, 0);}

由于在程序界面还没显示时样式表还没生效,所以在构造函数中时无法获取设置后的属性值,在程序启动并且显示后可以获取设置后的属性值。

4.qproperty-<属性名称>语法2

在继承于QWidget的类中,公有区域定义一个枚举,并使用Q_ENUM或者Q_ENUMS向元对象系统注册枚举类型;

使用Q_PROPERTY定义一个该枚举类型的属性;

Q_PROPERTY(AgeEnum age READ age WRITE setAge)

在类中分别定义属性对应的变量、函数;

在Qss样式表中使用 qproperty-<属性名称>语法设置属性的值,值为注册的枚举中的项,不能是数字。

/* 通过Qss设置Q_PROPERTY定义的属性的值 */#Widget { qproperty-age: age3; /* 通过Q_ENUM注册的枚举修改自定义属性值*/}

在程序启动并且显示后可获取设置后的属性值;

四、主要代码

widget.h

#ifndef WIDGET_H#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACEnamespace Ui { class Widget; }QT_END_NAMESPACEclass Widget : public QWidget{ Q_OBJECT Q_PROPERTY(bool checked READ isChecked WRITE setChecked) Q_PROPERTY(QColor BgColor READ isBgColor WRITE setBgColor) Q_PROPERTY(AgeEnum age READ age WRITE setAge) // 想要通过Q_ENUM注册的枚举修改属性值,属性的类型就需要时【枚举的类型】,而不能是其它类型,例如intpublic: Widget(QWidget *parent = nullptr); ~Widget(); enum AgeEnum { age1 = 10, age2 = 20, age3 = 30 }; Q_ENUM(AgeEnum) // 向元对象系统注册枚举类型(可以使用Q_ENUM或者Q_ENUMS,不过后者已经过时) bool isChecked() const; void setChecked(bool value); QColor isBgColor() const; void setBgColor(QColor color); AgeEnum age() const; void setAge(AgeEnum value);private slots: void on_pushButton_clicked(); void on_pushButton_2_clicked(); void on_pushButton_3_clicked();private: void initStyle();private: Ui::Widget *ui; bool m_checked = false; QColor m_bgColor = QColor(255, 255, 255); AgeEnum m_age;};#endif // WIDGET_H

widget.cpp

#include "widget.h"#include "ui_widget.h"#include <QFile>#include <QTextStream>#include <QDebug>#include <QStyle>Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget){ ui->setupUi(this); initStyle(); qDebug() << "在构造函数中获取属性值:" << m_bgColor.name(); // 无法获取到qss修改后的属性值}Widget::~Widget(){ delete ui;}bool Widget::isChecked() const{ return m_checked;}void Widget::setChecked(bool value){ m_checked = value;}QColor Widget::isBgColor() const{ return m_bgColor;}void Widget::setBgColor(QColor color){ m_bgColor = color;}Widget::AgeEnum Widget::age() const{ return m_age;}void Widget::setAge(AgeEnum value){ m_age = value;}/** * @brief 加载qss文件 */void Widget::initStyle(){ QString strFile = qApp->applicationDirPath() + "/style.css"; // 这里我没有使用资源文件,而是把样式表文件放在当前路径下,便于随时更换 QFile file(strFile); if(file.open(QIODevice::ReadOnly)) { QTextStream stream(&file); QString strQss; while (!stream.atEnd()) { strQss.append(stream.readLine()); } qApp->setStyleSheet(strQss); // 设置整个程序的样式表而不是当前窗口 } else { qWarning() << "打开qss文件失败!"; }}/** * @brief 通过Q_PROPERTY定义的属性更新Qss样式 * 设置属性的方式有两种 * 方式一:setChecked * 方式二:setProperty("checked", value) : 设置成功返回true,否则返回false */void Widget::on_pushButton_clicked(){ this->setChecked(!this->isChecked()); // 更改控件的属性 【Q_PROPERTY】 this->style()->polish(this); // 属性值更改后重新初始化给定控件的样式。}/** * @brief 通过动态属性的方式更新QSS样式 * 如果没有通过Q_PROPERTY定义属性,使用setProperty("property1", value) * 设置后会将property1添加为动态属性,并且返回false, * 效果和使用Q_PROPERTY定义的属性类似 */void Widget::on_pushButton_2_clicked(){ static bool value = true; qDebug() << this->setProperty("property1", value); // 设置动态属性 value = !value; this->style()->polish(this); // 属性值更改后重新初始化给定控件的样式。}/** * @brief 在Qss通过qproperty-属性 的方式修改属性的值,qproperty 语法只在程序启动显示控件是生效一次 * 在构造函数中由于控件还没有开始显示,所以qproperty没生效,是无法获取修改后的属性值的,在窗口显示后就可以获取到属性值 * 注意:虽然主要继承于QObject的类都可以通过Q_PROPERTY定义属性,但是只有继承于QWidget的类定义的属性可以通过Qss修改, * 因为QObject不包含QStyle */void Widget::on_pushButton_3_clicked(){ qDebug() << "程序启动后获取属性值:" << m_bgColor.name(); qDebug() <<"Qss设置的属性值:" << m_age;}

style.css

/* 设置Q_PROPERTY定义的属性样式 */#Widget[checked = true] { background-color: rgb(0, 255, 127);}/* 设置动态属性样式 */#Widget[property1 = true] { background-color: rgb(255, 0, 127);}/* 通过Qss设置Q_PROPERTY定义的属性的值 */#Widget { qproperty-BgColor: rgb(255, 0, 0); qproperty-age: age3; /* 通过Q_ENUM注册的枚举修改自定义属性值*/}五、源代码githubgitee
本文链接地址:https://www.jiuchutong.com/zhishi/296020.html 转载请保留说明!

上一篇:Video Transformer | TimeSformer 理解+ 代码实战

下一篇:JavaWeb 购物车项目(一)(java web 购物车)

  • vivox70pro+支持面部解锁吗(vivox70pro支持双卡双待吗)

    vivox70pro+支持面部解锁吗(vivox70pro支持双卡双待吗)

  • 电脑显示器接口哪个好(电脑显示器接口叫什么)

    电脑显示器接口哪个好(电脑显示器接口叫什么)

  • 网页中常见的图片格式有哪几种(网页中常见的图片格式不包含)

    网页中常见的图片格式有哪几种(网页中常见的图片格式不包含)

  • 淘宝两天不发货怎么办(淘宝两天不发货,该赔偿多少钱)

    淘宝两天不发货怎么办(淘宝两天不发货,该赔偿多少钱)

  • 苹果手机查找不可用 无法连接服务器(苹果手机查找不能用了怎么办)

    苹果手机查找不可用 无法连接服务器(苹果手机查找不能用了怎么办)

  • 苹果14天无理由的条件(苹果14天无理由退货对产品有什么要求)

    苹果14天无理由的条件(苹果14天无理由退货对产品有什么要求)

  • 抖音注销后身份证多久可以重新认证(抖音注销后身份证可以重新绑定吗)

    抖音注销后身份证多久可以重新认证(抖音注销后身份证可以重新绑定吗)

  • 苹果11pro死机怎么重启(iphone11pro卡死机)

    苹果11pro死机怎么重启(iphone11pro卡死机)

  • 电脑耳机连麦对方听不见声音(电脑耳机连麦对方听不到)

    电脑耳机连麦对方听不见声音(电脑耳机连麦对方听不到)

  • 微信互删后为什么还能看到朋友圈(微信互删后为什么点赞还在)

    微信互删后为什么还能看到朋友圈(微信互删后为什么点赞还在)

  • honor v10是什么型号(荣耀v10是什么机身)

    honor v10是什么型号(荣耀v10是什么机身)

  • 淘宝买家可以申请几次退款(淘宝买家可以申请几次售后)

    淘宝买家可以申请几次退款(淘宝买家可以申请几次售后)

  • 2070s和2080s性能差距(2080s和2070s性能差距)

    2070s和2080s性能差距(2080s和2070s性能差距)

  • 红米note5支持18w快充吗(红米note5支持5g网络吗)

    红米note5支持18w快充吗(红米note5支持5g网络吗)

  • ipad看着看着就黑屏(ipad看着看着就没声音了)

    ipad看着看着就黑屏(ipad看着看着就没声音了)

  • 为什么苹果11网络那么慢(为什么苹果11网络那么卡)

    为什么苹果11网络那么慢(为什么苹果11网络那么卡)

  • 整流用的元件是什么(整流用的元件是什么意思)

    整流用的元件是什么(整流用的元件是什么意思)

  • vivo高德地图怎么横屏(vivo高德地图怎么录制自己的声音)

    vivo高德地图怎么横屏(vivo高德地图怎么录制自己的声音)

  • 手机摔完黑屏怎么回事(手机摔后黑屏了)

    手机摔完黑屏怎么回事(手机摔后黑屏了)

  • qq扩列什么意思(qq扩列什么意思怎么玩)

    qq扩列什么意思(qq扩列什么意思怎么玩)

  • 拼多多怎么强制取消订单(拼多多怎么强制注销)

    拼多多怎么强制取消订单(拼多多怎么强制注销)

  • word2019参考文献怎么标注(world 参考文献)

    word2019参考文献怎么标注(world 参考文献)

  • ps填充里没有内容识别(ps填充里没有内容怎么办)

    ps填充里没有内容识别(ps填充里没有内容怎么办)

  • 用了很久的手机很卡怎么办(用了很久的手机密码瞬间不记得了)

    用了很久的手机很卡怎么办(用了很久的手机密码瞬间不记得了)

  • 三星手机数据怎么转移到内存卡(三星手机数据怎么导入苹果手机)

    三星手机数据怎么转移到内存卡(三星手机数据怎么导入苹果手机)

  • 封面点赞未发送是屏蔽吗(封面点赞未发送是什么情况)

    封面点赞未发送是屏蔽吗(封面点赞未发送是什么情况)

  • 哈罗单车押金怎么退(哈罗单车押金怎么交)

    哈罗单车押金怎么退(哈罗单车押金怎么交)

  • 增值税一般纳税人税率
  • 一般纳税人给小规模开普票是几个点
  • 公司车辆转让需要缴纳印花税吗
  • 发票抵扣联认证抵扣分录
  • 筹建期可以有收入吗
  • 周转材料租赁费怎么结转成本
  • 通行费抵扣入账会计分录?
  • 车间房屋维修费属于什么科目
  • 公司发实物要交税吗
  • 转让财产需要缴税吗
  • 应付利息与应付利息区别
  • 出口退税为0的产品明细
  • 社会组织接受捐赠的资金的使用原则
  • 超限量领购发票审批通过后
  • 贷款利息可以抵税吗
  • 自然人出租房屋房产税
  • 供暖税收分类编码是多少
  • 发票是不是一定要三签才能开
  • 股东垫支开办费
  • 预收的电费增值税如何缴纳?
  • 到银行开公司账户需要多少手续费
  • 房租增值税专用发票税率
  • 小规模纳税人免征增值税的账务处理
  • 工厂返费能拿到吗
  • 计提长期待摊费用的会计分录
  • rftray.exe - rftray是什么进程 有什么用
  • 待摊费用计入哪里
  • 新准则规定
  • pnaico.exe是什么软件
  • 国有控股公司改制
  • 政府收购企业的补偿款要交税吗
  • css水平居中和垂直居中怎么设置
  • 现金支出的账务处理
  • 小微企业税款征收方式
  • 进项税大于销项税怎么交税
  • 资产类账户有哪些
  • 员工探亲路费报销入哪个科目
  • 生育津贴能个人申请吗 个人怎么领取生育津贴
  • 固定资产折旧加计扣除最新政策
  • 其他应收款科目代码
  • 收到银行承兑汇票的账务处理
  • 收到以前年度退回的企业所得税怎么做账
  • 电子发票是否作废怎么查
  • 设计协会会长
  • 进口化妆品品牌大全
  • 增值税及附加税计算公式
  • 冲减应收账款该怎么处理
  • 期初应收账款对应什么科目试算平衡
  • 先取得发票后支付怎么办
  • 厂家给的返利应该怎么做会计分录
  • 收到销项负数发票怎么做分录
  • 水利建设税怎么做账
  • 公司收不到的账款怎么办
  • 所得税汇算清缴报告在哪查
  • 个人承担的社保算公司的费用吗
  • 账簿设制的一般程序
  • 怎么设置材料
  • sqlserver 中文字符集
  • 如何修改注册表值
  • win8系统怎样关机
  • 华硕和联想笔记本电脑哪个好点
  • win10每周更新
  • Win10预览版更新弹窗如何关闭
  • win10预览版和正式版
  • linux实用技巧
  • vs2019创建安装程序
  • perl数组元素个数
  • unity gui教程
  • WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
  • angularjs教程
  • android studio快捷键补全
  • unity 摄像机
  • 编写高性能代码时以下哪种技术可用于减少内存访问延迟
  • 简洁实用的公司治理机制
  • android反编译软件
  • 理解Python中的变量
  • Android IntentFilter 匹配原则浅析
  • 国家实行什么制度鼓励电力用户合理调整用电负荷
  • 融资租赁公司购入老旧租赁资产会计处理
  • 苏州税务局办税时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设