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

  • wps自定义快捷键怎么设置(wps自定义快捷键的方法)

    wps自定义快捷键怎么设置(wps自定义快捷键的方法)

  • 4g突然很慢(4g突然很慢是手机的问题还是网络本身问题)

    4g突然很慢(4g突然很慢是手机的问题还是网络本身问题)

  • oppo软件商店打不开怎么办(oppo软件商店打不开)

    oppo软件商店打不开怎么办(oppo软件商店打不开)

  • 华为荣耀微信拼音怎么打声调(华为手机微信怎么合并)

    华为荣耀微信拼音怎么打声调(华为手机微信怎么合并)

  • 微信付款码被别人拍照了怎么办(微信付款码被别人知道了怎么办)

    微信付款码被别人拍照了怎么办(微信付款码被别人知道了怎么办)

  • 荣耀20保修期内屏幕可以换么(荣耀保修期内屏幕碎了)

    荣耀20保修期内屏幕可以换么(荣耀保修期内屏幕碎了)

  • ipad1现在还能用吗	(ipad1现在还能用吗2022)

    ipad1现在还能用吗 (ipad1现在还能用吗2022)

  • mate20尺寸(mate20尺寸屏幕)

    mate20尺寸(mate20尺寸屏幕)

  • qq群课堂有观看记录吗(qq群课堂有观看历史吗)

    qq群课堂有观看记录吗(qq群课堂有观看历史吗)

  • QQ怎么看群号(怎么看qq群群号)

    QQ怎么看群号(怎么看qq群群号)

  • soul显示我暂时离开几天归期未有期(soul显示我暂时离开几天归期未有期是什么意思)

    soul显示我暂时离开几天归期未有期(soul显示我暂时离开几天归期未有期是什么意思)

  • 全民k歌怎么录视频唱歌(全民k歌怎么录屏唱歌)

    全民k歌怎么录视频唱歌(全民k歌怎么录屏唱歌)

  • wifi6需要多少兆宽带(wifi6需要多少的网速)

    wifi6需要多少兆宽带(wifi6需要多少的网速)

  • 图片样式怎么设置(图片样式怎么设置映像圆角矩形)

    图片样式怎么设置(图片样式怎么设置映像圆角矩形)

  • ps填充图案怎么调整大小(ps填充图案怎么导入)

    ps填充图案怎么调整大小(ps填充图案怎么导入)

  • 手机淘宝向店家发文件(手机淘宝店家怎么看不能用花呗付款)

    手机淘宝向店家发文件(手机淘宝店家怎么看不能用花呗付款)

  • 美图秀秀怎么换背景(美图秀秀怎么换脸p图)

    美图秀秀怎么换背景(美图秀秀怎么换脸p图)

  • 华为手机保修卡在哪(华为手机保修卡保修范围)

    华为手机保修卡在哪(华为手机保修卡保修范围)

  • 苹果手表电量能用多久(苹果手表电量能在手机上看吗)

    苹果手表电量能用多久(苹果手表电量能在手机上看吗)

  • 手机如何转换网络类型(手机怎样使用网线转换器上网)

    手机如何转换网络类型(手机怎样使用网线转换器上网)

  • cun-tl00是什么型号(cunal00)

    cun-tl00是什么型号(cunal00)

  • 苹果max怎么加快网速(苹果手机如何加快)

    苹果max怎么加快网速(苹果手机如何加快)

  • 迅雷如何导入未完成的下载(迅雷如何导入未删减视频)

    迅雷如何导入未完成的下载(迅雷如何导入未删减视频)

  • QQ浏览器怎么设置兼容模式(qq浏览器怎么设置青少年模式)

    QQ浏览器怎么设置兼容模式(qq浏览器怎么设置青少年模式)

  • 手机钉钉文件存储路径(手机钉钉上的文件)

    手机钉钉文件存储路径(手机钉钉上的文件)

  • 建筑业购买材料计入什么科目
  • 净利润跟税后利润是二个概念吗
  • 新购车辆车船税多少钱
  • 免征增值税企业进项税怎么处理
  • 污水处理企业如何捕捉碳中和减少了的碳足迹
  • 支持住房租赁市场金融新政
  • 会计核算差错
  • 施工企业挂靠账务处理怎么做
  • 购进货物建不动产进项税额抵扣
  • 出口货物预收账款会计分录
  • 租赁的房租再出租成本怎么做?
  • 房地产公司扣减土地出让金怎么入账?
  • 医院收到工会的钱怎么办
  • 劳务外包要通过应付职工薪酬吗
  • 未开票收入如何申报增值税,下个月怎么操作
  • 公司转让股权要去税务吗
  • 支付的水电费属于什么会计科目
  • 实收资本取出来要交税吗?
  • 民间非营利组织会计制度
  • 加速折旧税收优惠
  • 应收补贴款贷方余额
  • 返还的个税手续费奖励给个人需要缴纳个税吗
  • 高新企业研发费用认定条件
  • 持有至到期投资在资产负债表怎么填
  • 购买现金支票的扣费方式
  • 收入与成本不匹配建议怎么写
  • 单位社保部分会扣吗
  • 如何防止程序被关闭
  • 公司聚餐计入什么会计科目
  • 保养费计入什么科目
  • 财务冲抵如何处理
  • 结转消费成本的会计分录
  • 劳务公司社保手续办理
  • 存货周转材料报废处理会计分录
  • 营业利润投资收益是借方还是贷方
  • image driver
  • php curl命令详解
  • 在我国,企业可以用税前利润弥补几年内的损失
  • 资产负债表是不是根据记账凭证生成的
  • bootstrap 栅格
  • js监听事件和处理事件
  • it云化
  • 盒子模型的概念
  • 库存现金每月终了由谁清点
  • 投资性房地产在资产负债表中的列示
  • Php数组转json 参数不带引号
  • 2020信息采集
  • 上个月的票这个月作废后报增值税需不需要交费?
  • 金蝶怎么增加职员
  • 缴纳车辆购置税有发票吗
  • 公司出售二手车要交哪些税
  • 购入货物的运费计入
  • 暂估回冲方式
  • 建筑业 成本
  • 关于外币折算会计处理的表述中
  • 公司按揭贷款
  • 固定资产折旧的会计科目
  • 预付账款属于哪一类账户
  • 工程施工科目设置
  • 金蝶现金银行存款账怎么记账
  • 更换账簿需要注意哪些问题
  • 商业企业内部物流的主要作用是保证商品的正常销售
  • sql to sqlalchemy 转换的小例子
  • win2003开启远程桌面
  • 双硬盘无法进入bios
  • mac book丢失
  • welcome.exe - welcome进程是什么意思
  • spysweeper.exe - spysweeper是什么进程
  • 升级安装windows并保留文件
  • 打开安全启动
  • 怎样修改linux用户名和密码
  • mingw 编译
  • unicode 字符百科
  • unity3D关于公共安全内容制作
  • javascript bug
  • 2023年新乡契税补贴政策
  • 在医院如何开报告单
  • 烟叶收购价款
  • 广东省社保缴费基数
  • 消费税税目税率表2019
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设