在 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 属性 的相关文章

  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • 如何创建QWidget的屏幕截图?

    我在 Qt Creator 中做作业 在其中绘制 QWidget 并且需要保存此 QWdiget 的某些部分 我试图解决这个问题 QPixmap pixmap pixmap copy rectangle rectangle is part
  • QtCreator 调试暂停停在代码而不是汇编处

    如何配置 QtCreator 以便在调试并按下暂停时它会显示当前正在处理的代码 现在显示汇编 无法在任何地方找到有关此问题的答案 我使用的是 Windows 7 我在 Ubuntu 16 04 中使用 Qt Creator 4 2 2 时遇
  • QTcpSocket 有时不发送数据

    我有两个 QT 应用程序 一个应用程序可以被认为保存了大数据 它每秒向第二个应用程序发送大约 10 KB 的数据块 之前我尝试使用QUdpSocket来传输数据 但由于MTU限制在2 5K左右 并且需要自己分割和重新组合数据 所以我改用QT
  • PyQt:如何设置组合框项目可检查?

    为了将 GUI 小部件数量保持在最低限度 我需要找到一种方法来为用户提供下拉菜单项的选择 这些菜单项可用于过滤掉 listWidget 项中显示的内容 假设 listWidget 列出了 5 个不同类别的项目 Cat A Cat B Cat
  • 如何使用 Qtimer 添加 1 秒延迟

    我目前有一个方法如下 void SomeMethod int a Delay for one sec timer gt start 1000 After one sec SomeOtherFunction a 这个方法实际上是一个附加到信号
  • QGraphicsScene::clear 不会改变 sceneRect

    我有一个 QGraphicsScene 场景 和 QGraphicsView graphicsView 我有一个画图的方法 当我需要重绘所有图形时 我调用这个方法 一切都好 但我意识到 scene gt clear 不会改变 sceneRe
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示
  • 为 Windows 98 编译 Qt

    我需要支持 Windows 98 Qt 文档声称这是可能的 但没有说明 Qt 4 6 的分布式二进制文件不能在 Win98 上运行 而且我采样的大多数 Qt 应用程序也不能在 Win98 上运行 对于几个确实在 98 上运行的应用程序 我询
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • 从 Qt4 中的文本文件中逐字读取

    我想在 Qt4 中逐字读取一个文本文件 说实话我对它很陌生 我想在另一个文件中每行一个字写入 我可以在 C 中做到这一点 没有任何问题 但是当我尝试在 Qt4 中使用 ifstream 和 ofstream 时 我遇到了错误 这是我的 Qt
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • Mac 上的 Qt — 如何访问帮助菜单中的“搜索”

    我正在将我的 Qt 应用程序移植到 Mac OS X 在 Windows Linux 上 我使用 QLineEdit 在帮助菜单中提供搜索功能 In Mac OS X I saw something like this is built i
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 是否可以在 Qt Creator 中将 Qt 样式表与升级的小部件一起使用?

    我正在尝试使用 Qt 样式表对标准小部件进行一些重大的重新设计 因此 在为不同的小部件手动完成大部分工作之后 objectName选择器 我决定以某种方式对类似的小部件进行分组 例如我有多个QFrames其作用类似于内部表单中的标题 我希望
  • Qt 安装程序框架 - 如何在卸载时仅删除某些文件和文件夹

    我使用 Qt 安装程序框架 如何确保在卸载时仅删除某些文件或文件夹 而不是像当前那样删除安装文件夹中的所有文件 先感谢您 您可以覆盖默认行为component createOperations对于卸载程序 然后使用手动指定每个卸载路径com
  • 将 QByteArray 从大端转换为小端

    我想我在这里有点不知所措 我尝试了这么简单的事情 我不敢相信没有任何内置的 Qt 使用 Qt 5 6 2 我尝试将 QByteArray 内的数据从大端转换为小端 总是从相同的测试 QByteArray 开始 就像这样 QByteArray
  • Qt GUI 应用程序中的控制台输出?

    我有一个在 Windows 上运行的 Qt GUI 应用程序 它允许传递命令行选项 在某些情况下我想向控制台输出一条消息 然后退出 例如 int main int argc char argv QApplication a argc arg
  • 使用 PyQt 和 matplotlib 在可滚动小部件中显示多个绘图

    由于我没有得到答案this https stackoverflow com questions 12179893 creating a scrollable multiplot with pythons pylab我尝试用 PyQt 解决这

随机推荐

  • 免费空间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动态属性系统