在 QSS 中设置 Qt Widget 属性

2023-11-10

在 QSS 中设置 Qt Widget 属性

Q_OBJECT

// 添加自定义属性到 Qt动态属性系统 (一般写在 Q_OBJECT 下方)
Q_PROPERTY(QColor colSelectionColor READ colSelectionColor WRITE SetcolSelectionColor)

// QSS 中设置
qproperty-colSelectionColor : rgba(247, 106, 91, 64);

默认样式

QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_PanelButtonTool, &opt, &p, this);

添加以下代码, 使 toolButton 支持 :hover :pressed 状态

QStylePainter p(this);
/* 使组件支持 :hover :pressed 属性 */
QStyleOptionToolButton opt;
opt.init(this);
if (isDown())
    opt.state |= QStyle::State_Sunken;
if (isChecked())
    opt.state |= QStyle::State_On;
if (autoRaise())
    opt.state |= QStyle::State_AutoRaise;
if (!isChecked() && !isDown())
    opt.state |= QStyle::State_Raised;
p.drawComplexControl(QStyle::CC_ToolButton, opt);

QSS 自定义属性与 Qt 类型对应

myWgtClass {
    qproperty-num: 1;        // Q_PROPERTY(int num ...)
    qproperty-str: "test";    // Q_PROPERTY(QString str ...)
    qproperty-mySize: 10px 15px;    // Q_PROPERTY(QSize mySize ...)
    qproperty-myColor: white;    //Q_PROPERTY(QColor myClolr ...)
    qproperty-myBool: true;        //Q_PROPERTY(bool myBool ...)
    qproperty-pixmap: url(:/test/);    //Q_PROPERTY(QPixmap pixmap ...)
}
  • 备注:
    • 尽量不要使用 QSize. 当样式表值为小数时, 在程序中 QSize对应值为(0, 0). (尽量将 w, h 分为两个属性).

使用枚举

  • 定义枚举

    class myWgtClass {
    
    Q_OBJECT
    
    Q_ENUMS(MyEnum)
    Q_PROPERTY(MyEnum type READ type WRITE setType)
    
    public:
        enum MyEnum {
            E_A, E_B
        };
    
        MyEnum type(void) const { return m_type; }
        void setType(MyEnum otherType) { m_type = otherType; }
    private:
        MyEnum m_type;
    };
  • CSS 中设置

    myWgtClass {
        qproperty-myEnum: E_A;        //必须使用枚举类型, 不能用其值
    }

使用 QSS 属性选择器

  • 注意: 当一个属性值变化时,所引用的样式不会自动更新。相反地,必须手动触发更新才会生效。
    • unpolish(): 用于清理之前的样式
    • polish(): 用于添加新的样式

代码实例

应用实例: 窗口的最大化/恢复按钮

  • C++逻辑

    void Init(void)
    {
        SetMaxOrRestoreBtnStatus(true);
    }
    void MainWindow::on_maxOrRestoreBtn_clicked()
    {
        if (isMaximized()) {
            showNormal();
            SetMaxOrRestoreBtnStatus(true);
        } else {
            showMaximized();
            SetMaxOrRestoreBtnStatus(false);
        }
    
    //必须手动更新样式 有以下两种方法
    
    #if 0     // 方法1
    
        ui->maxOrRestoreBtn->style()->unpolish(ui->maxOrRestoreBtn);
        ui->maxOrRestoreBtn->style()->polish(ui->maxOrRestoreBtn);
        update();
    
    #else    // 方法2
    
        ui->maxOrRestoreBtn->setStyle(QApplication::style());
    
    #endif
    
    }
    
    void MainWindow::SetMaxOrRestoreBtnStatus(bool isMaxBtnStatus)
    {
        if (isMaxBtnStatus) {   //最大化按钮
            ui->maxOrRestoreBtn->setToolTip(tr("Maximize"));
            ui->maxOrRestoreBtn->setProperty("maxOrRestore", "maximize");
        } else {
            ui->maxOrRestoreBtn->setToolTip(tr("Restore"));
            ui->maxOrRestoreBtn->setProperty("maxOrRestore", "restore");
        }
    }
  • QSS 样式表

    
    #maxOrRestoreBtn[maxOrRestore="maximize"] {
    
        background: red;
    }
    
    #maxOrRestoreBtn[maxOrRestore="maximize"]:hover {
    
        background: yellow;
    }
    
    #maxOrRestoreBtn[maxOrRestore="restore"] {
    
        background: blue;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 QSS 中设置 Qt Widget 属性 的相关文章

随机推荐

  • 免费空间python_Cloud9免费云IDE代码编辑平台空间支持Node.js,PHP,Python可使用FTP管理_免费PHP空间

    Cloud9 IDE是一个用来测试运行Node js 和 JavaScript平台 但也支持Python Ruby和 Apache PHP的应用程序 例如Wordpress 前几天分享了支持Node js Python Go Rails等程
  • Java网络编程五子棋,具有玩家转态,登陆界面,多人房间对战,悔棋,求和,认输,聊天室,自动判断输赢等功能。

    小马猿花了一个月的时间终于完成了一个完整的联机版的五子棋游戏 本次代码共可分为 登陆的界面 基于 TPC 的网络连接 五子棋 游戏 共三个部分 如下 1 玩家行为类 2 游戏界面 由于小马猿只有一台电脑 所以用了一台电脑展示了两位玩家的界面
  • C语言--memset结构体初始化

    memset可以方便的清空一个结构类型的变量或数组 如 struct sample struct char csName 16 int iSeq int iType 对于变量 struct sample strcut stTest 一般情况
  • python打开浏览器不显示浏览器页面_python+selenium 浏览器无界面模式运行

    方法一 from selenium webdriver import Chrome ChromeOptions opt ChromeOptions 创建Chrome参数对象 opt headless True 把Chrome设置成可视化无界
  • 如何让iPad浏览器不再拒绝访问请求

    最近在网上流传着一种方法 能够让你的浏览器变得非常可爱 不会再拒绝你的任何访问要求 这是一个几乎能一劳永逸但是步骤却很复杂的方法 失败几率较高 首先要去注册一个谷歌开发者账号 然后在自己的电脑上搭建一个环境 在iPad上的设置较多 需要安装
  • PointNet、PointNet++代码解析

    如何利用CloudCompare软件进行点云数据标注 https blog csdn net weixin 44603934 article details 123591370 PointNet 训练自己的数据集 附源码 http www
  • Mol Cell Proteomics.

    大家好 本周分享的是发表在Molecular Cellular Proteomics上的一篇关于人的尿蛋白质组学的文章 题目是Comprehensive analysis of individual variation in the uri
  • 数组解构报错

    今天遇到这个错误提示 Invalid attempt to destructure non iterable instance In order to be iterable non array objects must have a Sy
  • Python 控制结构

    坚持代码练习 上次的作业你做了吗 这是参考答案 继续练习 本次测验题目如下 Question 4 Level 1 Question Write a program which accepts a sequence of comma sepa
  • 了解JVM(JavaEE初阶系列19)

    目录 前言 1 JVM是如何运行的 2 JVM中的内存区域划分 3 JVM的类加载机制 3 1JVM加载机制的五大步骤 3 1 1加载 3 1 1验证 3 1 1准备 3 1 1解析 3 1 1初始化 3 2总结 3 3JVM启动时机 3
  • Chapter 12 贝叶斯网络

    1 概率公式 条件概率 全概率公式 贝叶斯公式 Bayes 2 贝叶斯公式 2 1 贝叶斯公式带来的思考 给定某些样本 在这些样本中计算某结论出现的概率 即 贝叶斯公式 样本给定 则对于任何是常数 仅为归一化因子 忽略 若这些结论的先验概率
  • 在 Windows 操作系统上安装和配置

    1 下载安装包以获取最新版本 stable 的 Flutter SDK https storage flutter io cn flutter infra releases stable windows flutter windows 1
  • Pycharm修改python解释器

    Pycharm修改python解释器 在python学习过程中 遇到了这样的一个问题 早先通过pip安装的库在pycharm中无法使用 例如之前学习的numpy库在pycharm中无法调用 下面给出两个解决办法 1 通过pycharm自带的
  • 还在为不知道怎么学习网络安全而烦恼吗?这篇文带你从入门级开始学习网络安全—认识网络安全

    随着网络安全被列为国家安全战略的一部分 这个曾经细分的领域发展提速了不少 除了一些传统安全厂商以外 一些互联网大厂也都纷纷加码了在这一块的投入 随之而来的吸引了越来越多的新鲜血液不断涌入 不同于Java C C 等后端开发岗位有非常明晰的学
  • [转]笔试面试中问到的常见问题总结

    面试的三大重点 第一个是项目 项目这个应该挺好说的 只要自己有这方面的准备 第二个是数据结构和算法 这个无论在笔试还是在面试中都很重要 第三个如果面C 方向的话 C 基础很重要 接下来谈一下后二者各自的一些常见问题 一 数据结构和算法 链表
  • 基于Matlab的图像加噪滤波处理和图像边缘检测

    目录 1 1 原始图像展示 1 2 灰度图展示 1 3 高斯加噪图展示 1 4 均值滤波图展示 1 5 中值滤波图展示 1 6 高斯滤波图展示 对比三种滤波效果 2 1 Sobel边缘检测图展示 2 2 Canny边缘检测图展示 对比两种边
  • JAVA8 十大新特性浅谈

    本教程将Java8的新特新逐一列出 并将使用简单的代码示例来指导你如何使用默认接口方法 lambda表达式 方法引用以及多重Annotation 之后你将会学到最新的API上的改进 比如流 函数式接口 Map以及全新的日期API Java
  • matlab中plot函数用法

    线条 颜色等参数 1 简单的2维直线图 plot x y 同一坐标显示n条线 plot x y1 x y2 x 0 pi 10 2 pi y sin x figure hold on plot x y 2 plot X X是矩阵 表示矩阵的
  • 导入Excel文件的各种常见方法

    1 为了简单起见 可以考虑将包括扩展名为xls xlsx的各种Excel文件在Excel WPS表格中另存为CSV格式 更为方便和易于读取 直接使用pandas的read csv方法即可读取 如另存为 读取方法为 2 直接读取Excel文件
  • 在 QSS 中设置 Qt Widget 属性

    在 QSS 中设置 Qt Widget 属性 默认样式 QSS 自定义属性与 Qt 类型对应 使用枚举 使用 QSS 属性选择器 代码实例 在 QSS 中设置 Qt Widget 属性 Q OBJECT 添加自定义属性到 Qt动态属性系统