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

  • 美团外卖能用支付宝吗(美团外卖能用支付宝吗苹果手机)

    美团外卖能用支付宝吗(美团外卖能用支付宝吗苹果手机)

  • 电脑死机蓝屏怎么办(电脑死机出现蓝屏)

    电脑死机蓝屏怎么办(电脑死机出现蓝屏)

  • 笔记本续航五六个小时算什么水平(现在笔记本续航时间)

    笔记本续航五六个小时算什么水平(现在笔记本续航时间)

  • 网易云季卡是几个月(网易云音乐年卡什么时候最便宜)

    网易云季卡是几个月(网易云音乐年卡什么时候最便宜)

  • REV缩写是什么意思(rev这个缩写是什么意思)

    REV缩写是什么意思(rev这个缩写是什么意思)

  • b站实名认证怎么修改(b站实名认证怎么找回账号)

    b站实名认证怎么修改(b站实名认证怎么找回账号)

  • mla-tl10是什么型号(mlaal10是什么型号)

    mla-tl10是什么型号(mlaal10是什么型号)

  • 淘宝三颗心是什么等级(淘宝三颗心可以上多少宝贝)

    淘宝三颗心是什么等级(淘宝三颗心可以上多少宝贝)

  • vivox21屏幕多大(vivo x21屏幕多大)

    vivox21屏幕多大(vivo x21屏幕多大)

  • 1660super配什么显示器(1660super配什么样的显示器)

    1660super配什么显示器(1660super配什么样的显示器)

  • 苹果xsmax怎么关闭副卡(苹果xsmax怎么关闭自动调节亮度)

    苹果xsmax怎么关闭副卡(苹果xsmax怎么关闭自动调节亮度)

  • 手机qq语音怎么保存(手机QQ语音怎么转到电脑上)

    手机qq语音怎么保存(手机QQ语音怎么转到电脑上)

  • 滴嗒出行怎么设置导航(滴嗒出行怎么设置要经过自己同意上车)

    滴嗒出行怎么设置导航(滴嗒出行怎么设置要经过自己同意上车)

  • 抖音被拉黑了还能艾特吗(抖音被拉黑了还能艾特对方看视频吗)

    抖音被拉黑了还能艾特吗(抖音被拉黑了还能艾特对方看视频吗)

  • 金立m6怎么强制格式化(金立m6强制格式化怎样选泽)

    金立m6怎么强制格式化(金立m6强制格式化怎样选泽)

  • 华为保密柜怎么打开(华为保密柜怎么用)

    华为保密柜怎么打开(华为保密柜怎么用)

  • oppo手机怎么查看使用记录(oppo手机怎么查找另一部手机)

    oppo手机怎么查看使用记录(oppo手机怎么查找另一部手机)

  • 华为mate20和nova4区别(华为mate20和nova4哪个性价比高)

    华为mate20和nova4区别(华为mate20和nova4哪个性价比高)

  • 人工智能的应用(人工智能的应用论文)

    人工智能的应用(人工智能的应用论文)

  • 账户被禁用无法登录(账户禁用无法登录怎么办)

    账户被禁用无法登录(账户禁用无法登录怎么办)

  • win10远程连接win7连接不上去怎么办解决方法(win10远程连接win7密码正确,无法登陆)

    win10远程连接win7连接不上去怎么办解决方法(win10远程连接win7密码正确,无法登陆)

  • 下载适用于Android 的 Windows子系统时收到错误代码 0x800700B7怎么办?(androirc下载)

    下载适用于Android 的 Windows子系统时收到错误代码 0x800700B7怎么办?(androirc下载)

  • 【计算机视觉】图像分割与特征提取——基于Log、Canny的边缘检测(计算机视觉的应用)

    【计算机视觉】图像分割与特征提取——基于Log、Canny的边缘检测(计算机视觉的应用)

  • phpcms文章浏览次数始终不变(php网站访问量大怎么优化)

    phpcms文章浏览次数始终不变(php网站访问量大怎么优化)

  • 丢失增值税专用发票最新规定
  • 季报利润总额是填本季度金额还是本年累计数
  • 坏账准备和信用账户区别
  • 购买空调算什么费用
  • 一人有限公司年度审计报告
  • 员工报销款可以公转私吗
  • 未过户的车辆对车辆影响
  • 财政补贴金额
  • 小规模纳税人企业所得税起征点
  • 现金比率一般多少
  • 成品油购进数据未同步怎么办
  • 研发支出费用化支出包括哪些
  • 固定资产抵扣期限
  • 免税发票不用纳税可以吗
  • 什么叫社保人员
  • 开具发票有哪些特殊规定?
  • 抄税没成功
  • 土地增值税计税依据
  • 参加国外展会费用
  • 增值税小规模纳税人适用3%征收率
  • 基础设施建设包括哪些方面
  • 旅行社开的发票是否都要差额征税
  • 已抵扣未认证的发票
  • 包装本公司产品的出口包装物是否缴增值税?
  • 视同销售的企业所得税汇缴表怎么填列?
  • 增值税转出未交增值税是什么意思
  • PHP:stream_get_filters()的用法_Stream函数
  • Sandilands省级森林中被白霜覆盖的番红花,加拿大曼尼托巴 (© Jaynes Gallery/Danita Delimont)
  • 注销后怎么补缴社保
  • 企业利润取出税费有哪些
  • yolov3图像识别
  • php获取目录所有文件
  • 小微企业人员认定标准
  • 解决城市内涝的题目
  • 小规模纳税人开专票需要交税吗
  • 3d representation
  • vue3技巧
  • bluetooth hci0 command timeout
  • 安装充电桩电费怎么收
  • 需要缴纳企业所得税的企业类型
  • python怎么设置窗口界面
  • 财务费用手续费在借方还是贷方
  • 购买电梯会计账务处理
  • 营业执照需要提交什么材料
  • 税务异常怎么处理要多长时间
  • 工资包含福利费吗
  • 外购产品用于职工福利企业所得税视作销售吗
  • 支付贷款手续费怎么入账
  • 库存商品盘盈怎么做账
  • 期初建帐
  • 去年的招待费做什么科目
  • 资产负债表各项目占比
  • 物流公司账务处理流程及方法
  • 货款还没收到有违法所得吗
  • 无形资产转让计入什么科目
  • 产值和销售收入可以一样吗
  • win10安装mysql初始化失败原因
  • centos7安装mysql并jdbc测试教程
  • mysql数据库基础与实践课后答案
  • macmysql忘记密码如何配置
  • win7系统宽带连接651
  • archlinux安装zsh
  • Linux服务器管理的开机界面
  • win7用户在哪
  • mac如何预览字体大小
  • centos8安装锐速
  • UNITY开发工程师
  • 使用jquery
  • android开发详解
  • batfor循环里变量计算
  • js实现时间
  • node 回调函数
  • 小规模纳税人开专票可以抵扣吗
  • 国家税务系统电子税务局电话
  • 新能源车异地购车
  • 江西企业社保缴费基数查询
  • 台州土地成交
  • 在山东省一个月水费大概多少
  • 种植业税收优惠政策2023
  • 律师属于什么工作单位
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设