Qt之QSS(动态属性)

简述

QSS可以定制应用程序的外观,无需关注Qt样式背后的魔力。从非常轻微到极其复杂的调整,样式表都可以做到。对于一个完全定制和独特的用户体验,QtQuick和QGraphicsView是更好的选择。

  • 简述
  • 自定义属性
  • 限制
  • 示例
    • 效果
    • 源码
    • QSS
  • 更多参考

自定义属性

为了用户界面外观的动态变化,属性选择器可以与动态属性组合使用。动态属性在Qt4.2中引入,允许为编译时不存在的QObject属性分配属性值。即:如果为QObject设置一个urgent属性为true,该属性将跟随该类,但不会为urgent属性包含一个Q_PROPERTY宏。

创建样式选择器依赖于动态属性,例如:urgent,可以用一个非常动态的方式凸显用户界面。例如:

QLineEdit[urgent=true] {
  color: red;
}

限制

使用这种方式有局限性。最主要的是,当一个属性值变化时,所引用的样式不会自动更新。相反地,必须手动触发更新才会生效。

unpolish()用于清理之前的样式,而polish()则用于添加新的样式。

例如:

myLineEdit->setProperty("urgent", true);
myLineEdit->style()->unpolish(myLineEdit);
myLineEdit->style()->polish(myLineEdit);

注意:必须在部件的样式中使用,QStyle::polish既接受QWidge也接受QApplication作为参数。

示例

以自定义标题栏中的最大化/还原按钮为例,进行切换。

效果

源码

void TitleBar::updateMaximize()
{
    QWidget *pWindow = this->window();
    if (pWindow->isTopLevel())
    {
        bool bMaximize = pWindow->isMaximized();
        m_pMaximizeButton->setToolTip(bMaximize ? tr("Restore") : tr("Maximize"));
        m_pMaximizeButton->setProperty("maximizeProperty", bMaximize ? "restore" : "maximize");

        // 手动更新样式
        m_pMaximizeButton->style()->unpolish(m_pMaximizeButton);
        m_pMaximizeButton->style()->polish(m_pMaximizeButton);
        m_pMaximizeButton->update();
        //m_pMaximizeButton->setStyle(QApplication::style());
    }
}

使用属性选择器的时候,如果之前已经有了样式,那么,需要重新设置一下,使用了unpolish()与polish()。当然,也可以不用那么复杂,直接使用setStyle(QApplication::style())也可以搞定。

QSS

QPushButton#maximizeButton[maximizeProperty="maximize"] {
        border-radius: none;
        border-bottom-left-radius: 4px;
        border-bottom-right-radius: 4px;
        background: rgb(50, 50, 50);
        image: url(:/Images/maximize);
}
QPushButton#maximizeButton[maximizeProperty="maximize"]:hover {
        background: rgb(60, 60, 60);
        image: url(:/Images/maximizeHover);
}
QPushButton#maximizeButton[maximizeProperty="maximize"]:pressed {
        background: rgb(55, 55, 55);
        image: url(:/Images/maximizePressed);
}
QPushButton#maximizeButton[maximizeProperty="restore"] {
        border-radius: none;
        border-bottom-left-radius: 4px;
        border-bottom-right-radius: 4px;
        background: rgb(50, 50, 50);
        image: url(:/Images/restore);
}
QPushButton#maximizeButton[maximizeProperty="restore"]:hover {
        background: rgb(60, 60, 60);
        image: url(:/Images/restoreHover);
}
QPushButton#maximizeButton[maximizeProperty="restore"]:pressed {
        background: rgb(55, 55, 55);
        image: url(:/Images/restorePressed);
}

更多参考

时间: 2025-01-19 17:55:54

Qt之QSS(动态属性)的相关文章

Qt之QSS(样式表语法)

简述 Qt样式表以下统称QSS的术语和语法规则几乎和CSS相同.如果你熟悉CSS可以快速浏览以下内容. 简述 样式规则 选择器类型 子控件 伪选择器 解决冲突 级联效应 继承性 Namespaces中的部件 设置对象属性 更多参考 样式规则 QSS包含了一个样式规则序列一个样式规则由一个选择器和声明组成选择器指定哪些部件由规则影响声明指定哪些属性应该在部件上进行设置.例如 QPushButton { color: red } 上面的例子中QPushButton是选择器{ color: red }

Qt之QSS(语法高亮)

简述 语法高亮是文本编辑器用来显示文本的,特别是源代码,根据不同的类别来用不同的颜色和字体显示.这个功能有助于编写结构化的语言,例如:编程语言.标记语言,这些语言的语法错误显示是有区别的. 简述 详细描述 配置 高亮 更多参考 详细描述 语法高亮能帮助开发者很快的找到程序中的错误.例如,大部分编辑器会用不同的颜色突出字符串常量.所以,非常容易发现是否遗漏了分隔符,因为相对于其他文本颜色不同. Qt Creator 中默认情况下打开 qss 文件(*.qss)不会高亮显示,需要手动配置,让其更符合

Qt之QSS(Q_PROPERTY-原始属性)

简述 在Qt之QSS(样式表语法)一节讲过关于"设置对象属性"的用法,里面有一条很重要的原则是:任何可被识别的Q_PROPERTY都可以使用qproperty-语法设置. 这里需要对Qt属性系统有一定的了解,详见助手:The Property System. 简述 属性 实例 效果 QSS 源码 更多参考 属性 下面我们以QLabel为例,讲解如何在QSS中使用属性. class Q_WIDGETS_EXPORT QLabel : public QFrame { ... Q_PROPE

Qt之QSS(Q_PROPERTY-自定义属性)

简述 在Qt之QSS(Q_PROPERTY-原始属性)一节我们分享了Q_PROPERTY-原始属性的用法,但通常情况下我们需要很多自定义样式,例如:动态获取QSS样式,这时自定义属性就能很好的发挥其用武之地了. 简述 问题 解决方案 实例 效果 源码 QSS 使用 更多参考 问题 在使用QAbstractItemModel.QAbstractItemDelegate更新表格样式的时候,比如:背景色.前景色等,我们通常的做法是定义一些颜色常量,然后根据不同的条件显示不同的颜色,要么就是通过QSS全

Qt之QSS(QDarkStyleSheet)

简述 关于样式,前面介绍了很多内容,下面分享一个深色样式表,很值得借鉴! 简述 效果 QSS 更多参考 效果 QSS /* * The MIT License (MIT) * * Copyright (c) <2013-2014> <Colin Duquesnoy> * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and assoc

Qt之QSS(白色靓丽)

简述 Qt助手中有关于各种部件的QSS详细讲解,资源很丰富,请参考:Qt Style Sheets Examples. 白色靓丽 - 一款漂亮的QSS风格. 你可以直接使用,也可以随意转载,但请务必保留版权声明和许可声明,请参考"声明"部分. 简述 声明 效果 QSS 更多参考 声明 被授权人权利 被授权人有权利使用.复制.修改.合并.出版发行.散布.再授权及贩售软件及软件的副本. 被授权人可根据程序的需要修改授权条款为适当的内容. 被授权人义务 在软件和软件的所有副本中都必须包含版权

Qt之QSS(黑色炫酷)

简述 Qt助手中有关于各种部件的QSS详细讲解,资源很丰富,请参考:Qt Style Sheets Examples. 黑色炫酷 - 一款漂亮的QSS风格. 之前博客中分享了很多关于Qt的样式效果,几乎都是基下面此样式. 你可以直接使用,也可以随意转载,但请务必保留版权声明和许可声明,请参考"声明"部分. 简述 声明 效果 QSS 更多参考 声明 被授权人权利 被授权人有权利使用.复制.修改.合并.出版发行.散布.再授权及贩售软件及软件的副本. 被授权人可根据程序的需要修改授权条款为适

属性设置-Qt中QSS,对于各个控件的设置,各个属性都代表什么意思?

问题描述 Qt中QSS,对于各个控件的设置,各个属性都代表什么意思? Qt中QSS,对于各个控件的设置,各个属性都代表什么意思? 比如,设置QComboBox:down-arrow{...}.这个语句中,找了好久才找到down-arrow代表什么意思... 有没有系统的对各个控件属性的介绍? 解决方案 查看qt的文档,或者google下.

Qt之QSS(暗橙色)

简述 我觉得一个好看的 UI 可以潜意识地激励我们,不仅可以让我们工作的更高效.更有乐趣,而且可以让应用程序变得更漂亮.更直观. 我比较喜欢风格一致的产品,让所有的东西看起来像是一个大家庭,给人一种专业的视觉享受.当做出很专业的产品时,你甚至可以很自豪地称自己为一个艺术家. 简述 故事情节 QSS 样式 更多参考 版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820 故事情节 首先,感谢 Yasin,为我们提供了一套很经典的 QSS 样式