位置: 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 购物车)

  • 怎么充值qq音乐饭票(怎么充值qq音乐会员)

    怎么充值qq音乐饭票(怎么充值qq音乐会员)

  • 九价怎么预约手机(九价怎么预约成功)

    九价怎么预约手机(九价怎么预约成功)

  • 问卷星能查到填写人吗(问卷星查到填写人)

    问卷星能查到填写人吗(问卷星查到填写人)

  • qq皮肤怎么设置免费(qq里面的皮肤怎么设置)

    qq皮肤怎么设置免费(qq里面的皮肤怎么设置)

  • iphonexr怎么下软件

    iphonexr怎么下软件

  • 微信加人频繁 多久解封(微信加人频繁多久能好)

    微信加人频繁 多久解封(微信加人频繁多久能好)

  • 华硕b450m pro和plus的区别(华硕b450m pro和pro s)

    华硕b450m pro和plus的区别(华硕b450m pro和pro s)

  • iphone8plus怎么拒接(苹果8plus怎么拒绝接电话)

    iphone8plus怎么拒接(苹果8plus怎么拒绝接电话)

  • 6s能升级13.4吗(6s可以升级13.6吗)

    6s能升级13.4吗(6s可以升级13.6吗)

  • 抖音粉丝数显示不对(抖音粉丝数显示对不上)

    抖音粉丝数显示不对(抖音粉丝数显示对不上)

  • m2固态硬盘和ssd固态硬盘区别(M2固态硬盘和SSD固态硬盘兼容吗)

    m2固态硬盘和ssd固态硬盘区别(M2固态硬盘和SSD固态硬盘兼容吗)

  • 关闭广告设置(关闭广告设置小米)

    关闭广告设置(关闭广告设置小米)

  • iphonexsmax有3dtouch么

    iphonexsmax有3dtouch么

  • 手机号加入黑名单对方听到是什么(手机号加入黑名单打电话会怎样)

    手机号加入黑名单对方听到是什么(手机号加入黑名单打电话会怎样)

  • 苹果新手机充电有讲究吗(苹果新手机充电充到多少比较好)

    苹果新手机充电有讲究吗(苹果新手机充电充到多少比较好)

  • 华为铃声是什么歌中文(华为铃声是什么名字)

    华为铃声是什么歌中文(华为铃声是什么名字)

  • 2600和3600差多少(3600和2600x的差别)

    2600和3600差多少(3600和2600x的差别)

  • 电视总网络中断怎么回事(电视总网络中断怎么办)

    电视总网络中断怎么回事(电视总网络中断怎么办)

  • 微信朋友圈可以查看访问记录吗(微信朋友圈可以看到谁浏览过吗)

    微信朋友圈可以查看访问记录吗(微信朋友圈可以看到谁浏览过吗)

  • qq3g在线到底在不在线(手机qq3g在线是什么意思)

    qq3g在线到底在不在线(手机qq3g在线是什么意思)

  • 苹果11有几款型号(苹果11有几款型号,分别多大尺寸)

    苹果11有几款型号(苹果11有几款型号,分别多大尺寸)

  • OPPO k5支持深色模式吗(oppok5深色模式怎么设置)

    OPPO k5支持深色模式吗(oppok5深色模式怎么设置)

  • 一直播回放怎么下载(一直播回放怎么删除不了)

    一直播回放怎么下载(一直播回放怎么删除不了)

  • 小米手机如何关闭nfc功能(小米手机如何关闭广告)

    小米手机如何关闭nfc功能(小米手机如何关闭广告)

  • 淘宝直播等级有什么用(淘宝直播等级有什么用处)

    淘宝直播等级有什么用(淘宝直播等级有什么用处)

  • 菜鸟驿站如何申请(菜鸟驿站如何申请寄件)

    菜鸟驿站如何申请(菜鸟驿站如何申请寄件)

  • 微信小程序自定义导航栏,实现不同用户角色登陆后显示不同的tabbar(避坑版)(微信小程序自定义函数)

    微信小程序自定义导航栏,实现不同用户角色登陆后显示不同的tabbar(避坑版)(微信小程序自定义函数)

  • 【线性回归类算法的建模与评估】(线性回归csdn)

    【线性回归类算法的建模与评估】(线性回归csdn)

  • 互联网文本处理挑战巨大 中文分词系统设计如何面对?  Linux环境编程  ChinaUnix.net(互联网+文本格式)

    互联网文本处理挑战巨大 中文分词系统设计如何面对? Linux环境编程 ChinaUnix.net(互联网+文本格式)

  • 简易计税方法的计算公式
  • 现金流量表中的销售商品提供劳务收到的现金
  • 分公司企业所得税汇总缴纳还是单独缴纳
  • 销货方违规作废增值税专用发票怎么处理
  • 多计费用以前年度损益调整
  • 无票销售纳税后怎么处理
  • 预付卡销售和充值属于什么费用
  • 预售房提前还款需要去解押吗
  • 支付银行借款利息属于现金使用范围吗
  • 资产负债表和利润表和现金流量表的关系
  • 单位向个人购买材料没有发票
  • 小微企业开普通发票
  • 上海奉贤区控规图
  • 员工生育期间社保
  • 企业会计准则财务报表本期金额和上期金额
  • 劳务派遣差额征税政策
  • 建筑安装预缴增值税
  • 当月取得的进项必须当月勾选吗
  • 电子发票如何作废冲红
  • php排队系统
  • 境外服务包括哪些内容
  • php aop
  • 购入材料会计分录怎么写
  • 如何选择一款适合自己家庭的凉席
  • thinkphp i方法
  • 微信php开发教程
  • 莱茵地区在德国哪里
  • 混凝土简易计税能抵扣么
  • ecshop app搭建
  • 真正有效解决近视的方法
  • framework core
  • 投标须知所包括的内容有哪些
  • 厂房维修费是制造费用还是管理费用
  • 物业水电费可以差额征税吗
  • uni.getSystemInfo(OBJECT)
  • 增值税减免附加税用计提吗
  • nodejs基础知识
  • 2022-8-30 servlet
  • 居民企业和非居民企业如何判定?
  • 500元以下开收据要交税吗
  • 进项税转出能转回吗
  • python之sqlalchemy创建表的实例详解
  • 公司认缴出资怎么交税
  • access的使用教程
  • 企业应纳税额计算直接利息的应纳税额
  • 个税专项附加扣除标准调整
  • 给员工的奖金计入什么科目
  • 珠宝行业的会计
  • 估价入帐能跨年吗
  • 工程预付款如何扣回
  • 稳岗补贴会计分录怎么做,需要缴纳企业所得税不
  • mysql b+树节点大小
  • windows server2008系统弹出今天必须修改密码该怎么处理?
  • vcspawn.exe什么意思
  • centos最小化安装配置网络
  • linux crontab用法
  • WIN10系统怎么改成泰语
  • js中date对象
  • unity hud优化
  • 初始化opengl时出错
  • 前端html中怎么让文字左移
  • node.js go
  • java中初始化顺序
  • 获取文件内容
  • div css table
  • perl 文件
  • 教你三招让电脑打字
  • node js教程
  • linux特殊符号转义
  • Python安装包
  • javascript的几种数据类型
  • js.ajax
  • javascript面向对象精要pdf下载
  • android中toast用法
  • 学校 税务登记
  • 客货两用车应如何运输
  • 小额贷款公司在职人员和离职人员情节哪种轻
  • 广东发票勾选认证操作流程
  • 企业税务状态查询网站
  • 广州代理记账公司注册
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设