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

  • 国家企业信用系统公司怎么查营业执照?

    国家企业信用系统公司怎么查营业执照?

  • 小天才怎么解除上课禁用(小天才怎么解除长续航模式)

    小天才怎么解除上课禁用(小天才怎么解除长续航模式)

  • kwai是什么(kwai是什么意思中文翻译)

    kwai是什么(kwai是什么意思中文翻译)

  • 闽政通身份证认证失败(闽政通怎么用身份证登录)

    闽政通身份证认证失败(闽政通怎么用身份证登录)

  • 苹果手机一看视频就发烫怎么办(苹果手机一看视频就发热是怎么回事)

    苹果手机一看视频就发烫怎么办(苹果手机一看视频就发热是怎么回事)

  • 苹果ipad有哪些型号(苹果ipad有哪些系列)

    苹果ipad有哪些型号(苹果ipad有哪些系列)

  • 佳能相机充电要多久(佳能相机如何充电)

    佳能相机充电要多久(佳能相机如何充电)

  • 如何挂失电话号码(如何挂失电话号码电信)

    如何挂失电话号码(如何挂失电话号码电信)

  • 16th是什么手机(手机16+1t)

    16th是什么手机(手机16+1t)

  • 屏幕排线坏了会出现什么情况(屏幕排线坏了会触屏不了吗)

    屏幕排线坏了会出现什么情况(屏幕排线坏了会触屏不了吗)

  • 小米5c联通4g稳定吗(小米5c 联通)

    小米5c联通4g稳定吗(小米5c 联通)

  • 计算机的系统总线分为(计算机的系统总线有数据总线、地址总线和( ))

    计算机的系统总线分为(计算机的系统总线有数据总线、地址总线和( ))

  • 手机进入盲人模式怎么解决(手机进入盲人模式怎么调回来)

    手机进入盲人模式怎么解决(手机进入盲人模式怎么调回来)

  • word文档如何画线(word文档如何画横线)

    word文档如何画线(word文档如何画横线)

  • 苹果下载app要验证怎么办(苹果下载app要验证)

    苹果下载app要验证怎么办(苹果下载app要验证)

  • 苹果7p有前置呼吸灯吗(苹果7p有前置呼叫功能吗)

    苹果7p有前置呼吸灯吗(苹果7p有前置呼叫功能吗)

  • 路亚助投器怎么绑(路亚助投器怎么绑线)

    路亚助投器怎么绑(路亚助投器怎么绑线)

  • 苹果可以加大内存吗(苹果加大内存有影响吗)

    苹果可以加大内存吗(苹果加大内存有影响吗)

  • 拼多多不退款怎样投诉(拼多多不退款怎么申请客服强制介入)

    拼多多不退款怎样投诉(拼多多不退款怎么申请客服强制介入)

  • 在钉钉上怎么截图(钉钉上怎么截长图)

    在钉钉上怎么截图(钉钉上怎么截长图)

  • 华为watch2pro和gt区别(华为watch2pro和gt2区别)

    华为watch2pro和gt区别(华为watch2pro和gt2区别)

  • r17微信视频怎么开启美颜(微信视频咋整)

    r17微信视频怎么开启美颜(微信视频咋整)

  • fireworks是什么软件(fireworks软件是做什么的)

    fireworks是什么软件(fireworks软件是做什么的)

  • 开机速度慢是怎么回事?(开机速度慢是怎么回事)

    开机速度慢是怎么回事?(开机速度慢是怎么回事)

  • vptray.exe进程是什么?在什么情况下可以关掉不用?(vpengine.exe进程)

    vptray.exe进程是什么?在什么情况下可以关掉不用?(vpengine.exe进程)

  • kendns.exe是什么进程  kendns进程查询(kcleaner.exe是什么)

    kendns.exe是什么进程 kendns进程查询(kcleaner.exe是什么)

  • vue-router路由懒加载(vue router-view路由详解)

    vue-router路由懒加载(vue router-view路由详解)

  • 税务局退回个税会计分录
  • 一般纳税人季报怎么申报
  • 基本保险包括
  • 代扣个税的会计分录怎么做
  • 购买车间使用的设备计入什么
  • 汇算清缴调表不调账调的是哪张表
  • 外购生物资产的成本不包括
  • 公司收承兑贴现的会计分录
  • 商贸企业涉税问题
  • 白条入账所得税怎么做纳税调曾
  • 可变股权转让对价会计处理怎么做?
  • 亏损企业研发费加计扣除可以递延吗
  • 微信提现手续费最新规定
  • 工薪个人所得税扣除
  • 有了营业执照就可以买社保了吗
  • 跨地区经营建筑企业预缴增值税可以先开票后预缴吗
  • 网上申报时纳税人怎么填
  • 支付职工补贴计入什么科目
  • 受托加工物资产生的成本怎么做会计核算?
  • 企业财务内部控制的主要内容有哪些
  • 利息赔款是否缴纳企业所得税?
  • 增值税销售额怎么看
  • 投资公司抛售原始股如何交税?
  • Linux系统怎么调整屏幕亮度
  • 如何彻底关闭电脑右下角弹窗
  • Win10宽带无法连接
  • 微软输入法繁体字变简体字
  • win7系统咋样
  • php如何防止表单重复提交
  • 公司与个人的往来款怎么处理
  • php文件锁并发 性能
  • php上传文件夹
  • Windows操作系统出现内存错误解决方法
  • 离退休干部书报费有关文件
  • 资金性质是什么有哪些方面
  • 外购商品转为自用洧费税计算
  • php验证码扭曲效果怎么做
  • 混合销售行为的税务处理
  • php函数传递参数方式
  • php批量上传图片到服务器
  • 专票如何申领
  • 论文 导论
  • 腾讯产品面经
  • 税控盘开具增值税专用发票步骤
  • 原材料被盗如何报案
  • 应交税费月末怎么结转分录
  • 帝国cms调用api接口
  • dedecms织梦不同栏目导航显示不同样式的方法
  • 本年利润的会计分录
  • 预收账款是什么要素
  • 税务开票金额每个月有限制吗
  • 企业注销清算报告模板
  • 银行收到货款会计分录怎么做
  • 管理费用包括哪些税
  • 月末一次结转销售成本分录
  • 为什么要缴纳残保金
  • 工程施工发生的酒水费会计分录
  • 长期无法收回的应收账款如何处理
  • sqlserver数据库中表的类型有哪些
  • 数据库服务器配置方案
  • sql server常用
  • win7系统ie浏览器打不开
  • winxp怎么装系统
  • 怎么在VMware上玩LOL
  • xp系统怎么把ie浏览器放到桌面
  • linux中符号连接文件是什么意思
  • win8系统怎么设置
  • c1.exe是什么
  • synchost.exe - synchost是什么进程 有什么作用
  • linux用户是什么意思
  • w10系统如何
  • JavaScript创建数量n由用户决定的数组
  • angular的ngif
  • 使用java
  • javascript巧用eval函数组装表单输入项为json对象的方法
  • 深圳国税电子税务局
  • 非道路机械环保标志图片
  • 广东地方税务局官网
  • 不予处罚不予立案
  • 房屋契税可以退个人所得税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设